图解示例
1 public class RuntimeDemo { 2 public static void main(String[] args) { 3 int x = 500; 4 int y = 100; 5 int a = x / y; 6 int b = 50; 7 System.out.println(a + b); 8 } 9 }
使用javap命令查看变编译字节码查看
字节码执行过程展示:初始状态
上面代码调用 System.out.println() 方法时,首先需要看看 System 类有没有加载,再看看 PrintStream 类有没有加载
如果没有加载,则执行加载,执行时,将常量池中的符号引用(字面量)转换为直接引用(真正的地址值)
程序计数器始终计算的都是当前代码运行的位置,目的是为了方便记录方法调用后能够正常返回,或者是进行了CPU切换后,也能回来到原来的代码进行执行。
线程私有结构:程序计数器、虚拟机栈、本地方法栈
每个虚拟机栈由由具体的栈帧组成,在栈帧的动态链接中,保存至对方法的引用
方法区在 JDK7 之前,使用永久代实现,在 JDK8 之后,使用元空间实现
Minor GC 针对于新生区,Major GC 针对于老年区,Full GC 针对于整个堆空间和方法区
原文:https://www.cnblogs.com/h--d/p/14190412.html