Java代码执行过程

JVM内部分层

Class文件分析
package com.demo;
public class Math {
private int math() {
int a = 1;
int b = 2;
int c = (a+b)*10;
return c;
}
public static void main(String[] args) {
Math math = new Math();
System.out.println(math.math());
}
}
math.class文件(cmd 然后javap)


堆

MetaData是元空间,jdk1.8之后才有的。以前叫永久代(非堆),用的是堆里面(虚拟机的)内存。
现在存在物理内存,实现了真正的隔离
方法区是抽象,元空间和永久代是方法区的具体实现
堆存储对象和GC过程
- 首先先将创建的对象放在Eden区
- 如果Eden区放满之后,会进行一次轻(小)gc,将Eden区不可达的对象消除
- 如果轻(小)gc之后Eden区还是满的,可以放还存活的对象到SurvivorSpace的From
- 如果Eden和From都放满之后,会再一次gc,如果gc之后还是不够,会将From区数据复制到To区,From就空了
- 下次Eden区放满之后gc就放到To区(也就是To和From角色互换了)
- 经过15次(JDK默认次数)轮询之后,将还存活的对象就放到Old Generation老年代
- 老年代放满之后(前面的新生代都放满了),就会进行FullGC(Stop the world),Java程序都无法响应了,全部拿来回收
293

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



