流程:java源文件经过前端编译器(javac或ECJ)将.java文件编译为.class字节码文件,然后JRE加载.class文件,载入系统分配给JVM的内存区,然后执行引擎解释或编译类文件,再由即时编译器将字节码转换为机器码。
目录
类加载
将类的字节码文件(.class)中的二进制数据读入内存,将其放在运行时数据区的方法区内,然后在堆上创建java.lang.Class对象,封装类在方法区内的数据结构。类加载的最终产品是位于堆中的类对象,类对象封装了类在方法区内的数据结构,并且向JAVA程序提供了访问方法区内数据结构的接口。
运行时数据区
详情可见JVM内存区域划分、JVM运行时数据区和对象的创建过程
例子:
接下来我们创建一个Test类,里面存放如下内容:
public class Test{
public static void main(String[] args) {
String name = "best.lei";
sayHello(name);
}
public static void sayHello(String name) {
System.out.println("Hello " + name);
}
}
进行反编译(javap -verbose Test):
ldc:从常量池中取
运行时数据区的变化: