深入理解JVM之java代码的执行机制
来源:互联网 发布:java sleep占用cpu 编辑:程序博客网 时间:2024/05/21 10:36
1 JVM把java类文件编译为字节码(.class)文件步骤:
1)分析和输入到符号表(Parser和Enter)
2)注释处理(Annotation Processing)
3)语义分析和生产class文件(采用的方法为后序遍历语法树)(Analyse and Generate)
2 类加载机制(JVM装载class文件)
1) 装载:JVM通过类的全限定名和类加载器来完成类的加载。备注:数组类型中的元素类型由所在的classLoader加载,数据本身由JVM创建
2) 链接:对二进制字节码的格式进行校验,初始化装载类中的静态成员变量以及解析类中调用的接口,类
3) 初始化:执行类中静态初始化代码,构造器代码及静态属性的初始化。在以下情况下被触发执行:1)new 2)反射调用了类中的方法 3)子类调用了初始化
4JVM启动过程中指定的初始化类
类加载器:BootstarpClassLoader ExtensionClassLoader(ExtClassLoader) SystemClassLoader(AppClassLoader) userDefinedClassLoader,
依次为下 一个的父类。
BootstarpClassLoader:完成JAVA_HOME中jre/librt.jar中class文件的加载
ExtClassLoader :完成扩展功能jar包的加载
AppClassLoader:完成classPath中的jar包及目录的加载
classLoader 提供的关键方法:loadClass findLoadedClass findClass findSystemClass defineClass resolveClass
3 类执行机制
类文件加载到jvm生产Class对象以后,就可以执行器方法了。JVM采用了invokestatic(静态方法),invokevritual(实例方法),invokeinterface(接口方法), invokespecial(私有方法及init方法)四种方法来执行不同方法的调用(通过javap -c xx可以查看)。
常量池存放内容:所有Field名称,方法名称,方法签名,类名称,代码及class文件中的常量值。
类执行机制常见的有编译执行和解释执行,解释执行相对用的不太多,下面说编译执行:
编译执行分client编译执行和server编译执行
client较为轻量级,占用内存少,适用于桌面交互式系统,JDK6以后采用的是线性扫描寄存器分配算法,其他方面的优化:方法内联,去虚拟化,冗余消除。
server为重量级,占用内存多些,适合服务器端的应用,采用的是图着色寄存器分配算法,其他方面的优化:标量替换,栈上分配(没有逃逸的对象在栈上分配),同步消除。
- 深入理解JVM之java代码的执行机制
- 深入理解JVM(二)------Java代码执行机制
- 深入理解JVM(二)------Java代码执行机制
- 深入理解JVM(二)------Java代码执行机制
- 深入理解JVM之类的加载机制
- java 深入理解JVM--JVM垃圾回收机制
- 深入理解Java之jvm启动流程
- 深入理解JVM之走进Java
- jvm之Java代码的编译和执行
- 深入理解JVM之虚拟机字节码执行引擎
- [深入理解JVM 一]---Java程序执行流程
- 深入理解Java类实例化时jvm执行顺序
- 深入理解JVM之六:类加载机制
- 深入理解JVM之六:类加载机制
- 深入理解JVM之六:类加载机制
- 深入理解JVM之虚拟机类加载机制
- 深入理解JVM(六)-Java垃圾回收机制GC
- 深入理解JVM(四)-Java虚拟机类加载机制
- Struts2页面到action的三种传值方式
- 重建二叉树
- PackageManagerService学习笔记五-构造方法
- 基于android4.4 KitKat 制作彩色Emoji的字体
- 二逼事汇总 第3期
- 深入理解JVM之java代码的执行机制
- Csh脚本调用Csh脚本,sh脚本调用Csh脚本
- 多线程(线程间通信-多生产者多消费者问题-JDK1.5解决办法-范例),停止线程,线程中方法的区别,匿名内部类实现多线程,线程总结
- eclipse的一些问题总结
- Java函数
- uva1467 - Installation 贪心+暴力
- java表达式
- java流程控制
- java面向对象