JVM内存与垃圾回收笔记
简介:JVM可以执行由其它语言编译过来的符合编译规范的字节码文件,因此,JVM可以多种语言,java字节码又可以称jvm字节码。也因此,java支持多语言混合编程。许多的来自系统的底层的支持的增强,也在推动java虚拟机向“多语言虚拟机”的方向发展。
虚拟机可分为系统虚拟机(如visual box)和程序虚拟机(jvm)。
1、JVM的整体结构

1、堆:存储对象(线程共享)
a、分为新生代和老年代,新生代中又分为1个 Eden 区域 和 2个 Survivor(from和to) 区域
b、 Eden满时触发MinorGC;调用System.gc或老年代、方法区空间不足或MinorGC后进入老年代的平均大小大于老年代的可用内存,或由Eden区、From Space区向To Space区复制时,对象大小大于To Space可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小时出发Full GC;
c、通过引用计数(无法解决循环依赖的对象)和可达分析(对象到GCRoot间是否有引用链)判断对象是否需要回收
d、回收算法有:标记-清除算法,标记-压缩算法,复制算法,分代收集算法。使用分代收集算法比较多,具体算法如下:新生代采用复制算法,老年代用标记-整理 或者 标记-清除
2、方法区:类信息、常量、静态变量(线程共享)
3、虚拟机栈:执行每个方法的时候,都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息
4、本地方法栈:同虚拟机栈,只不过是存储本地方法的相关信息的;
5、程序计数器。指示Java虚拟机下一条需要执行的字节码指令;
程序计数器、虚拟机栈、本地方法栈都是随线程而生随线程而灭,栈帧随着方法的进入和退出做入栈和出栈操作,实现了自动的内存清理

被折叠的 条评论
为什么被折叠?



