Java程序执行流程和JVM回收算法

本文详细介绍了Java程序的执行流程,包括编译和运行两个阶段,以及JVM执行的基本原理。阐述了类加载机制的过程,从自定义类加载器到系统默认加载器的工作流程,并通过具体实例演示了类加载的过程。此外,还深入分析了运行时JMM模型下的执行细节。

系列文章目录


前言

Java 的执行流程和JVM执行的算法是常见的面试题。我们应该进行教科书的Answer.


一、Java 执行流程?

Java执行流程主要是利用程序委派机制完成

二、使用步骤

1.编译

Java 主要分为编译和运行2个阶段。
ja

java 源码分析器完成

点击complie ,主要进行编译。
在这里插入图片描述
类加载机制:

类加载机制

类执行机制

Java源码编译机制
类加载机制:
在这里插入图片描述
custom classLoader–>appclassLoad–>Extension classLoder–>Bootstrap :
通过java.lang.classloader–>loadclasspath表的类和包,LOAD jare 下的类和jar,最后下载jre 下的xbootclasspath 选项的jar.

我们来写一个java 程序验证一下,
试试成成自定义的类,加载classpth 下的包,记载jre 下的ext 和rt.jar 下的包。

代码如下(示例):

public static void main(String[] args){

Student s = new Student(23,“dqrcsc”,“20150723”);//执行完毕

s.study(56;

Student.getCnt();

s.run();

}

2.运行

点击运行生成run.JVM执行引擎来处理的。
在这里插入图片描述
我们在执行期间发生了什么呢?一般都发生在内存下JMM模型:
1.在局部变量表发送战阵,
局部变量表长度为2,slot0存放参数args,slot1存放局部变量Student s,操作数栈最大深度为5。
ew#7指令,在java堆中创建一个Student对象,并将其引用值放入栈顶。
这个需要工具跟踪。

nvokestatic #12 调用静态方法getCnt()不需要传任何参数

pop:getCnt()方法有返回值,将其出栈

aload_1:将slot1处的引用值入栈

invokevirtual #13:调用0x2222对象的run()方法,重写自父类的方法,需要动态分派,所以使用invokevirtual指令

return:main()返回,程序运行结束。


总结

链接: link.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迅捷的软件产品制作专家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值