Java代码执行流程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java代码执行流程相关的知识,希望对你有一定的参考价值。
说明:本文主要参考自《分布式Java应用:基础与实践》
1、Java代码执行流程
- 第一步:*.java-->*.class(编译期)
- 第二步:从*.class文件将其中的内容加载到内存(类加载)(运行期)
- 第三步:执行代码(运行期)
2、代码编译
javac命令将源码文件编译为*.class文件。
后边将介绍:
- javac将*.java编译成*.class文件的过程
- class文件的文件格式,以及其存储的内容
3、类加载
主要是指将*.class文件加载到JVM,并形成Class对象的机制,之后就可以对Class对象实例化并调用了。
特点:
- 类加载机制可以在运行时动态加载外部类
后边将介绍:
- 类加载的过程
- 类加载的双亲委托机制
- 类加载器的层次关系及源码
4、执行代码
两种执行方式:
- 解释执行(运行期解释字节码并执行)
- 速度慢,效率低
- 但是要比编译为机器码执行省内存
- 编译为机器码执行(将字节码编译为机器码并执行,这个编译过程发生在运行期,称为JIT编译),下面是两种模式
- client(即C1):只做少量性能开销比高的优化,占用内存少,适用于桌面程序,主要的优化包括:
- 方法内联
- 去虚拟化
- 冗余消除
- server(即C2):进行了大量优化,占用内存多,适用于服务端程序。会收集大量的运行时信息。
- 逃逸分析:根据运行状况来判断方法中的变量是否会被外部读取,若不会,此变量是逃逸的。基于此,C2在编译时会做:
- 标量替换
- 栈上分配
- 同步削除
- 逃逸分析:根据运行状况来判断方法中的变量是否会被外部读取,若不会,此变量是逃逸的。基于此,C2在编译时会做:
- 32为机器默认选择C1,可在启动时添加-client或-server来指定,64位机器若CPU>2且物理内存>2G则默认为C2,否则为C1
- client(即C1):只做少量性能开销比高的优化,占用内存少,适用于桌面程序,主要的优化包括:
- Sun JDK执行代码的机制:对在执行过程中执行频率高的代码进行编译,对执行频率不高的代码继续解释执行
后边将介绍:
- Sun JDK执行代码的过程
- C1以及C2执行的一些优化
- 编译执行与解释执行的使用的衡量点
以上是关于Java代码执行流程的主要内容,如果未能解决你的问题,请参考以下文章