Android–进阶对Java平台的理解?Java是解释执行吗?
2018-07-20 本文已影响41人
遛狗的程序员
最近感悟:对自己负责、对工作负责
问题:
- 对Java平台的理解?
- Java是解释执行,这句话正确吗?
首先在这里我们就基于HotSpot虚拟机进行分析(因为作者对HotSpot理解有点模糊,强化一下)
维基百科:
Java HotSpot Virtual Machine
开发者 甲骨文公司 (前升阳公司)
HotSpot Group
HotSpot的正式发布名称为"Java HotSpot Performance Engine",是Java虚拟机的一个实现,包含了服务器版和桌面应用程序版,现时由Oracle维护并发布。它利用JIT及自适应优化技术(自动查找性能热点并进行动态优化,这也是HotSpot名字的由来)来提高性能。
两种执行方式
- 解释执行(运行时、解释字节码并执行)
强制使用该模式:-Xint
- 编译执行(将字节码编译为机器码执行,这个编译过程发生在运行期,称为JIT编译)
强制使用该模式 -Xcomp
两种编译模式对比:
- client(即C1):只做少量性能开销比高的优化,占用内存少,适用于桌面程序。
- server(即C2):进行了大量优化,占用内存多,适用于服务端程序。会收集大量的运行时信息。
总结:
解释器:
- 程序启动速度比编译快。
- 节省内存(不需要编译,所以不需要放置编译后的机器码)。
JIT编译器:
- 时间长了,对于“热点代码”的执行会快。
注意:
- 之所以使用JIT而不是在编译器直接编译成机器码,除了上面解释器的原因以外,还有为了在运行期获取数据,有目的的进行编译。
回答问题1:
宏观角度:
Java平台通过虚拟机屏幕了操作系统的底层细节,使得开发者不需要关心不同操作系统之间的差异。Java平台已经形成了一个生态系统,在这个生态系统中有诸多的研究领域:
- 虚拟机、编译技术的优化(例如:GC优化、JIT、AOT等):对效率的追求是人类的天性之一。
- Java语言本身的变化。
- 大数据处理。
- 客户端开发(例如:Android平台)
- ...
微观角度:
- Java语言本身、JDK中所提供的核心类库和相关工具:
- 面向对象(封装、继承、多态)
- 跨平台(JVM运行.class文件)
- 语言(泛型、Lambda)
- 类库(集合、并发、网络、IO/NIO)
- JRE(Java运行环境、JVM、类库)
- JDK (JDK开发工具、包括JRE、javac、诊断工具)
- ...
- Java虚拟机以及其他包含的GC。
回答问题2:
回答片面,不正确!
-
Java源文件经过javac编译成字节码文件(.class文件)
-
.class文件经过JVM解释执行或者编译执行
- 解析:.class文件经过JVM内嵌的解析器解析执行。
- 编译:存在JIT编译器(Just In Time Compile 即使编译器)把经常运行的代码作为“热点代码”编译成本地相关的机器代码,并且做各种层次的优化。
- AOT编译器:Java9提供的直接将所有的代码编译成机器码执行。
上面答案分析相信也会随着知识面的不断拓宽而不断的进行优化修改
参考:https://www.cnblogs.com/java-zhao/p/5203144.html
,极客时间APP第1讲|谈谈你对Java平台的理解
声明:此为原创,转载请联系作者
作者:微信公众号添加公众号-遛狗的程序员 ,或者可以扫描以下二维码关注相关技术文章。
qrcode_for_gh_1ba0785324d6_430.jpg当然喜爱技术,乐于分享的你也可以可以添加作者微信号:
WXCD.jpeg