Java程序运行全过程

Java程序运行过程

一、 过程图解

在这里插入图片描述

二、阶段分析

1)编译

在Java中指将**.java**文件转化为 .class文件(字节码文件)的过程。

其中这个字节码文件,真正的实现了跨平台、跨语言。因为JVM里运行的就是.class文件,只要符合这个格式就能运行。所以在任何平台,用任何语言只要你能把程序编译成字节码文件就能在JVM里运行。

例如	在源程序中有一个类叫User,一个接口叫Iner,编译后生成的是User.class  Iner.class

在编译阶段,编译器收集所有的静态字段的赋值语句及静态代码块,并按语句出现的顺序拼接出一个类初始化方法()

2)加载

类加载器加载.class文件到内存:

  1. 类加载器会在指定的classpath中找到.class这些文件,然后读取字节流中的数据,将其存储在JVM方法区(了解JVM结构可以去https://blog.csdn.net/moneyshi/article/details/53033577

  2. 根据.class的信息建立一个Class对象,作为运行时访问这个类的各种数据的接口(一般也在方法区)。

  3. 验证格式、语义等

  4. 为类的静态变量分配内存并设为JVM默认的初值,对于非静态的变量,则不会为它们分配内存。

    静态变量的初值为JVM默认的初值,而不是我们在程序中设定的初值。

    ​ JVM默认的初值:

    ​ 基本类型(int、long、short、char…)的默认值为0。
    ​ 引用类型 null

  5. 字节码文件中存放的部分方法、字段等的符号引用可以解析为其在内存中的直接引用,无需等到运行时解析。

  6. 此时,执行引擎会调用()方法对静态字段进行代码中编写的初始化操作。

3)执行

引擎寻找main()方法,执行其中字节码指令

对象实例会被放进JVM的java堆

一个线程产生一个java栈,当运行到一个方法就创建一个栈帧(包含局部变量表、操作栈、方法返回值),将它入栈,方法执行结束出栈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值