1.Java平台与编译

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讲》

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容