随笔分类 - JVM
摘要:前言 我们在学习 java 基础的时候,从宏观上了解一个类到运行大致是:.java 文件通过 javac 编译器编译得到 .class 文件,在用到该类时,jvm 会加载该 class 文件,并创建对应的 class 对象,将 class 文件加载到 jvm 的内存当中,这个过程也被称之为类加载过程
阅读全文
摘要:由于 java 有垃圾回收机制,所以往往不太会去关注栈堆的内存分配问题,直至OOM 一、了解栈堆概念 1、堆【存储对象创建实例】 程序开始运行时,JVM从OS获取一些内存,部分是堆内存。堆内存通常在存储地址的底层,向上排列。 堆是一个"运行时"数据区,类实例化的对象就是从堆上去分配空间的; 在堆上分
阅读全文
摘要:一、基本概念 JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程。 1. 加载 加载是类加载过程中的一个阶段,这个阶段虚拟机要完成3件事。 通过一个类的全限定名来获取定义此类的二进制字节流。 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。
阅读全文
摘要:前边讲到 JVM 运行时内存的地方,关于新生代、老年代中 GC 垃圾回收以及垃圾回收算法,不知是否有点懵懵的,这篇一起了解一下垃圾回收以及垃圾回收算法。 一、垃圾回收需要完成的三件事 哪些内存需要回收?——垃圾对象(如何判定对象为垃圾对象) 如何回收?——垃圾回收算法 何时回收? 1. 哪些内存需要
阅读全文
摘要:了解JVM运行时的内存分配 前言 上文中,在介绍运行时数据区域中的 JAVA 堆时,提到了 JVM 中的堆,一般分为三大部分:新生代、老年代、永久代,本文将进一步了解运行时的内存分配情况。 正文 1.新生代 主要用来存放新生(new)的对象。一般占据堆的 1/3 空间。由于频繁创建对象,所以新生代会
阅读全文
摘要:1. 基本概念 jvm 是可运行Java代码的假想计算机,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 jvm 是运行在操作系统之上的,屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在 jvm 上运行的字节码,就可以在多种平台上不加修改地运行。 Java
阅读全文