JVM | 知识总结
最近入手了《深入理解Java虚拟机》第三版,正好也在面试,就将一些比较重要的知识点列出来了。 Java内存区域 Java的内存区域分为程序计数器,Java虚拟机栈,本地方法栈,Java堆,方法区,运行时常量池。 其中线程私有的是:程序计数器,Java虚拟机栈和本地方法栈 HotSpot将Java虚拟机栈和本地方法栈合二为一。 对象内存分配方式:指针碰撞和空闲列表 在类加载完成过后,就会给对象分配内存空间(对象在类加载完成后所需要的内存大小是完全确定) 指针碰撞:假设Java堆中的内存是绝对完整的,所有被使用过的内存放在一边,空闲的内存放在一边,中间放着一个指针作为分界点的指示器,那所分配的内存就是把那个指针向空闲空间方面挪动一段与对象大小相等的距离,这种分配方式叫做指针碰撞(Bump The Pointer) 空闲列表:如果Java堆中的内存并不是规整的,已经使用的内存和空闲的内存相互交错在一起,那就没有办法进行指针碰撞了,这时候虚拟机就必须维护一个列表,记录那些内存是可用的,在分配的时候从列表中找到一块足够大的空间划分给对象实列,并更新表上的记录,这种方式被称为空闲列表。 虚拟....