低门槛-JVM系列2

JVM体系

》类加载机制
》编译与反编译
》JVM内存结构
》JVM内存模型
》垃圾回收
》JVM参数及调优
》JVM对象模型
》JVM对象模型


编译与反编译

编译

 前端编译:将java文件转变为jvm可以识别的字节码文件
    流程:词法分析》符号流-语法分析》语法树-语义分析》语法树-代码生成
    优点:一些语法糖的内容可以在这个阶段完成不需要再到JVM执行
    缺点:对代码运行速度没有任何的优化;需要结合JIT才能完成编译流程
    编译器:javac ,eclipse JDT中的ECT

后端编译:(JUST IN TIME complier 即时编译)在运行时把Class文件字节码编译成本地机器码的过程
    流程:  机器无关代码优化》中间代码-代码生成》机器语言代码-机器相关代码优化》最终的机器代码      
    优点:收集监控信息,来收集热点代码,转化为本地机器代码,提高了执行速度
    缺点:因为需要收集监控信息,所以会影响程序
    后端编译器:HotSpot虚拟机的C1、C2编译器

反编译:就是将.class文件 转换成.java文件

反编译的工具:javap、jad、crf
Javap:jdk自带的反编译器工具

JIT优化:

逃逸分析:分析对象动态作用域的分析技术,不是算法,只是进行优化的前提验证条件

方法逃逸:当一个对象在方法中被定义以后,则可能被外部方法所引用

线程逃逸:在方法逃逸的基础上,有可能被外部线程所访问

栈上分配:如果对象不会方法逃逸,那么把这个对象在栈上分配内存,对象所占的空间会随栈帧出栈而销毁.对象会随着方法的结束而销毁,则会减少gc的压力

标量替换:如果一个对象没有逃逸,并且如歌这个对象可以被拆散的话,那程序真正执行的时候,可能不会在创建该对象,而是改为直接创建它的诺个被这个方法使用到的成员来使用

同步消除:线程同步本身就是一个相对耗时的过程,如果逃逸分析能够确定一个变量不会逃逸出线程,无法被其他线程访问,那这个变量的读写肯定就不会有竞争,对这个变量实施的同步操作也就可以消除掉。

锁优化:减少锁持有时间、减少锁粒度、读写分离锁代替独占锁、锁分离、锁粗化

AOT编译:(ahead of time 静态提前编译)直接将java 源码编译为本地机器码

优点:把编译的机器码存储到磁盘,不占用内存
缺点:提高了复杂度
编译器:ART (Android Runtime)#
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务