JVM 运行时数据区主要划分为
1.栈
程序计数器:主要记录线程执行字节码的位置,如果是本地方法则为空
虚拟机栈:存放线程局部变量,参数类型,方法名等,线程执行就是一个出栈入栈的操作
本地方法栈:执行native方法
2.堆
jvm主要存放实例对象和数组引用的位置
3.方法区
存放class文件编译后的信息(如类,方法,字段,接口的信息),静态变量,常量,编译器编译后的代码。在Class文件中除了类的字段、方法、接口等描述信息外,还有一项信息是常量池,用来存储编译期间生成的字面量和符号引用
JVM GC机制,新生代和老年代区别
新生代(Eden,FromSurvivor,ToSurvivor)
一开始对象都在Eden中,经过一次Minor GC 进入Survivor区
老年代:当Survivor区对象年龄达到阀值就会进入老年代
Minor GC:当Eden空间不足时触发
Major GC/Full GC:当老年代空间不足时触发,当老年代最大的可用连续空间大小>新生代所有对象大小?Major GC:Full GC