内存结构
JVM的内存结构大概分为:
- 堆(heap):线程共享,所有的对象实例以及数组都要在堆上
- 方法区: 线程共享,存储类信息,常量
- 方法栈(JVM stack): 线程私有,存储局部变量表,操作栈,动态链接,方法出口,对象指针
- 本地方法栈: 线程私有,为虚拟机使用到Native方法服务
- PC寄存器: 线程私有,指向下一条要执行的指令
对象内存分配
- 指针碰撞(Bump the Pointer)
- 空闲列表(Free List)
选择哪种分配方式由java堆是否规整决定,而Java堆是否规整又由所采用的垃圾收集器是否带有压缩整理功能决定
对象的内存分布
CG 判断可回收垃圾
目前主流的虚拟机都是采用GC Roots Tracing算法,比如Sun的HotSpot虚拟机便是采用该算法,该算法的核心算法是从GC Roots对象