Java入门之了解JVM(24)

程序计数器记录程序的执行位置JVM通过修改程序计数器中的值来进行:分支,循环,跳转等等的操作虚拟机栈每个方法执行时都会在虚拟机栈中生成一个“栈帧”栈帧中包含:局部变量表、操作数栈、动态连接、方法出口等信息其中局部变量表存储了编译期间得知的各种基本数据类型、对象引用等内存本地方法栈本地方法栈和虚拟机栈其实是一样的,不同的地方在于本地方法栈针对的是native修饰的本地方法,即针对java平台无法实现的方法,这些方法调用时,就在本地方法栈中进行操作需要注意的是,在Sun HotSpot虚拟机中,本地方法栈和虚拟机栈是一个东西,即没有区分两者而是二合为一JVM是如何给对象分配内存的

JVM是什么时候得知对象的大小?

对象所需的内存大小在类加载过程完成后就可以得知

关于指针碰撞和空闲列表的概念

指针碰撞:使用"分界点指示器"记录指针位置,通过挪动指针来分配内存,这种分配方式分配出来的空间是规整的,即有规律的分配方式

空闲列表:jvm通过维护一个空间列表来去分配内存,这个空闲列表记录了哪些内存是可用的,在分配空间时,在这个列表种选出一块足够大的内存分配给对象即可,这种分配方式分配的内存时不规整的,即已用内存和空闲内存相互交错

推荐阅读