《Java核心技术36讲》阅读笔记:谈谈对Java平台的理解笔记

1. 谈谈你对Java平台的理解。java

  Java是一种面向对象的语言,最显著的特性有两个方面:程序员

    一个就是一次编译,处处运行(Write once, run anywhere),可以很是容易的得到跨平台能力;编辑器

    另外一个就是垃圾收集(GC,Garbage Collection),Java经过GC回收分配内存,大部分状况下程序员不须要操心内存的分配和回收;工具

 

  什么是JRE(Java Runtime Environment)/JDK(Java Development Kit)?性能

    JRE:java运行环境,包含了JVM,Java内裤,以及一些模块;优化

    JDK:JRE的一个超集,提供了更多工具,好比编辑器、各类诊断工具;操作系统

    JVM < JRE < JDK对象

 

2. Java是解释执行,这句话正确么?blog

  

  Java是解释执行,这个说法不太准确。咱们开发java的源代码,经过Javac编译成字节码,而后在运行时经过JVM内嵌的解释器将字节码转换为最终的机器码。内存

可是常见的JVM(Oracle JDK 提供的Hotspot JVM),都提供了动态编译器JIT(Just in Time),JIT可以在运行时将热点代码编译成机器码,这种状况下部分热点代码就属于编译执行,而不是解释执行。

  如图Java是分为编译器和运行时。java的编译生成的是字节码,而不是能够直接执行的机器码。Java经过字节码和JVM这种跨平台的抽象,屏蔽了操做系统和硬件的细节,这也是“一次编译,处处执行的基础”。

  JVM启动时能够指定不一样的参数对运行模式进行选择,例如:

    -Xmixed:解释和编译混合模式;

    -Xint:只进行解释执行,不对代码进行编译,抛弃JIT可能带来的性能优点;

    -Xcomp:关闭解释器或者叫作最大优化级别。但这种模式并不必定是最高效的,他会致使JVM启动变慢,同时有些JIT编译器优化方式,如分支预测,若是不进行profiling,每每不能进行有效优化。

    AOT(Ahead-of-Time Compilation):直接将字节码编译成机器代码,避免了JIT预热等各方面的开销。在Oracle JDK 9 引入了实验性的AOT特征,并增长了新的jaotc工具;

相关文章
相关标签/搜索