Java核心技术----对Java平台的理解

1.概述

Java虚拟机机制(JVM)

  • “书写一次,到处运行”, 能够非常容易获得跨平台能力. Java 通过字节码和 Java 虚拟机(JVM)这种跨平台的抽象,屏蔽了操作系统和硬件的细节,这也是实现“一次编译,到处执行”的基础。

  • 流程: 源代码(.java文件) -> 编译 -> 字节码(.class文件) -> 执行(不同平台的JVM)

  • 类加载大致过程:加载、验证、链接、初始化(这里参考了周志明的《深入理解 Java 虚拟机》 ,非常棒的 JVM 上手书籍)
    avatar
    avatar

垃圾回收机制(GC)

  • 提供了一种系统级线程跟踪存储空间的分配情况,并在JVM的空闲时释放那些可以被释放的存储器的空间。
  • 垃圾回收是在java程序运行过程中自动进行的,程序员无法精准控制和干预。

JRE和JDK

  • JRE就是 Java 运行环境,包含了 JVM 和 Java 类库,以及一些模块等。
  • JDK可以看作是 JRE 的一个超集,提供了更多工具,比如编译器、各种诊断工具等。

java语言特性

  • 泛型、Lambda 等

基础类库

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

三大特征

  • 封装,继承,多态

Java蓝图
avatar


2.Java的编译执行

java是解释型语言

  • 我们开发的 Java 的源代码,首先通过 Javac 编译成为字节码(bytecode),然后,在运行时,通过 Java 虚拟机(JVM)内嵌的解释器将字节码转换成为最终的机器码。但是常见的 JVM,比如我们大多数情况使用的 Oracle JDK 提供的 Hotspot JVM,都提供了 JIT(Just-In-Time)编译器,也就是通常所说的动态编译器,JIT 能够在运行时将热点代码编译成机器码,这种情况下部分热点代码就属于编译执行,而不是解释执行了
  • Java 分为编译期和运行时 : ①Javac 的编译,编译 Java 源码生成“.class”文件里面实际是字节码,而不是可以直接执行的机器码。Java 通过字节码和 Java 虚拟机(JVM)这种跨平台的抽象,屏蔽了操作系统和硬件的细节,这也是实现“一次编译,到处执行”的基础。②在运行时,JVM 会通过类加载器(Class-Loader)加载字节码,解释或者编译执行。

java编译方式

  • 主流 Java 版本中,如 JDK 8 实际是解释和编译混合的一种模式,即所谓的混合模式(-Xmixed)。通常运行在 server 模式的 JVM,会进行上万次调用以收集足够的信息进行高效的编译,client 模式这个门限是 1500 次。Oracle Hotspot JVM 内置了两个不同的 JIT compiler,C1 对应前面说的 client 模式,适用于对于启动速度敏感的应用,比如普通 Java 桌面应用;C2 对应 server 模式,它的优化是为长时间运行的服务器端应用设计的。默认是采用所谓的 分层编译(TieredCompilation)
  • Java 虚拟机启动时,可以指定不同的参数对运行模式进行选择。 比如,指定“-Xint”,就是告诉 JVM 只进行解释执行,不对代码进行编译,这种模式抛弃了 JIT 可能带来的性能优势。毕竟解释器(interpreter)是逐条读入,逐条解释运行的。与其相对应的,还有一个“-Xcomp”参数,这是告诉 JVM 关闭解释器,不要进行解释执行,或者叫作最大优化级别-Xcomp”会导致 JVM 启动变慢非常多,同时有些 JIT 编译器优化方式,比如分支预测,如果不进行 profiling,往往并不能进行有效优化。
  • 除了我们日常最常见的 Java 使用模式,其实还有一种新的编译方式,即所谓的 AOT(Ahead-of-Time Compilation),直接将字节码编译成机器代码,这样就避免了 JIT 预热等各方面的开销,比如 Oracle JDK 9 就引入了实验性的 AOT 特性,并且增加了新的 jaotc 工具。利用下面的命令把某个类或者某个模块编译成为 AOT 库:
jaotc --output libHelloWorld.so HelloWorld.class
jaotc --output libjava.base.so --module java.base

    然后,在启动时直接指定就可以了。

java -XX:AOTLibrary=./libHelloWorld.so,./libjava.base.so HelloWorld

    而且,Oracle JDK 支持分层编译和 AOT 协作使用,这两者并不是二选一的关系。

猜你喜欢

转载自blog.csdn.net/qq_20160723/article/details/80340156
今日推荐