1.平台理解

一、两大特性

书写一次,到处运行。

垃圾收集。

JRE包含JVM和Java类库。

JDK包含JVM、编译器、各种诊断工具等。

二、执行方式

解释执行:

编写源代码

Javac编译成字节码

运行时JVM内嵌的解释器将字节码转换成为最终的机器码

常见的JVM(Hotspot JVM):

JIT编译器,动态编译器

在运行时将热点代码编译成机器码

这种情况属于编译执行,而不是解释执行

三、语言特性:泛型、Lambda等

四、基础类库:集合、IO/NIO、网络、并发、安全等

五、类加载机制

常用版本JDK内嵌的Class-Loader:Bootstrap、Application和Extension Class-loader。

类加载大致过程:加载、验证、连接、初始化《深入理解Java虚拟机》。

自定义Class-Loader。

垃圾回收的基本原理。

常见的垃圾收集器:SerialGC、Parallel GC、CMS、G1等,各适用于什么样的工作负载。

六、JDK及Java领域的工具

编译器、运行时环境、安全工具、诊断和监控工具等

七、Java平台

Java/JVM生态:Java EE,Spring,Hadoop,Spark,Cassandra,ElasticSearch,Maven。

特性:基本语言特性,面向对象,反射,泛型。

类库:核心类库,IO/NIO,网络,utils等

   安全类库

   jdk,management等类库

   海量第三方类库

虚拟机:垃圾收集器、运行时、动态编译、辅助功能,如JFR等。

工具:辅助工具,如jlink,jar,jdeps之类

   编译器,javac、sjavac

   诊断工具:jmap,jstack,jconsole,jhsdb,jcmd

八、一次编译,到处运行的基础

Javac将源码编译成“.class”文件,里面是字节码,不是可以直接执行的机器码。

通过字节码和跨平台的抽象,屏蔽操作系统和硬件的细节。

九、解释或编译执行

主流Java版本:

JDK8,解释和编译混合模式(-Xmixed)。运行在Server模式的jvm,会进行上万次调用收集足够信息进行高效的编译,client模式门限是1500次。

Oracle Hotspot JVM内置两个不同的JIT compiler,C1对应client模式,适用于对启动速度敏感的应用,C2对应server模式,为长时间运行的服务器端应用进行优化。默认采用分层编译(TieredCompilation)。

虚拟机启动时,运行模式选择:

-Xint,只进行解释执行,不对代码进行编译。解释器逐条读入,逐条解释运行的。

-Xcomp,关闭解释器,不要进行解释执行,最大优化级别。

[-Xcomp会导致JVM启动变得慢非常多,有些JIT编译器优化方式,比如分支预测,如果不进行profiling,往往并不能进行有效优化。]

AOT(Ahead-of-Time Compilation)编译方式,直接将字节码编译成机器代码。

Oracle JDK 9引入了实验性的AOT特性,增加新的jaotc工具。

把某个类或者某个模块编译成为AOT库:

jaotc --output libHelloTC.so HelloTC.class

jaotc --output libjava.base.so --module java.base

java -XX:AOTLibrary=./libHelloTC.so,./libjava.base.so HelloTC

Oracle JDK支持分层编译和AOT协作使用,两者并不是二选一的关系。http://openjdk.java.net/jeps/295

AOT除这种方式,早有第三方工具(GCJ、Excelsior JET)提供相关功能。

JVM上运行的语言:本质上合规的字节码都可以运行,Clojure、Scala、Groovy、JRuby、Jython等大量JVM语言,活跃在不同的场景。

猜你喜欢

转载自www.cnblogs.com/wcsan/p/9045128.html
1.