JVM工作原理

本文详细介绍了Java应用程序的执行流程,从.java文件通过javac或ECJ编译成.class字节码文件,到JVM如何加载这些字节码并执行。类加载过程中,字节码被加载到方法区,然后在堆上创建对应的Class对象。运行时数据区包括了方法区、堆等重要区域,它们在程序运行时存储各种数据。以Test类为例,展示了字节码的反编译结果,并分析了运行时数据区的变化。
摘要由CSDN通过智能技术生成

流程: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:从常量池中取

 运行时数据区的变化:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值