1.Java平台
- Java平台两个最主要的特点:1.一次书写,到处运行 2.垃圾回收
- 1.到处运行:主要依靠JVM,Java代码被编译成字节码文件,运行在对应不同硬件的JVM上,屏蔽了操作系统与硬件
- 2.垃圾回收:像C语言,程序员可以通过
malloc
自己申请内存空间,但是用完必须要释放,否则会造成内存泄露。Java无需自己去管理不使用的内存。
- Java的JVM、JRE、JDK
- JVM: Java虚拟机,Java跨平台的基础
- JRE:Java程序运行所需环境,包含JVM和Java类库
- JDK:Java开发工具包,包含了JRE和其他编译器、诊断工具。
2.Java是解释执行?
不准确
- Java代码首先被Javac编译成字节码,运行时,JVM内嵌的解释器将字节码转换为机器码
- 但是常见的JVM,也提供了JIT编译器(动态编译器),能够在运行时将热点代码编译成机器码,此时就是编译执行而不是解释执行了
3.拓展
- 主流的Java版本中,如JDK8是解释和编译混合的模式。
- JVM有clinet模式和server模式
- client:1500次编译
- server:上万次调用收集信息编译
- Oracle Hotspot JVM提供两种JIT
- C1:适用于启动速度敏感的应用,如普通桌面应用--client
- C2:适用于长时间运行的服务器端设计--server
- JVM启动时,可以指定不同的参数对运行模式进行选择
-
-Xint
:告诉JVM只解释执行,不对代码进行编译。抛弃了JIT带来的性能优势 -
-Xcomp
:关闭解释器,不要解释执行。 -
AOT
模式:直接将字节码编译成机器代码,避免了JIT预热等方面的开销- 编译:
jaotc --output libHelloWorld.so HelloWorld.class jaotc --output libjava.base.so --module java.base
- 启动
java -XX:AOTLibrary=./libHelloWorld.so,./libjava.base.so HelloWorld
-
- 不仅仅只有 Java 语言可以运行在 JVM 上,本质上合规的字节码都可以运行,Java 语言自身也为此提供了便利,我们可以看到类似 Clojure、Scala、Groovy、JRuby、Jython 等大量 JVM 语言。
参考:《java核心技术36讲》