谈谈对于Java平台的理解

  • Java本身是一种面向对象的语言
  • 有两个显著的特性
    • 书写一次,到处运行,能够非常容易地获得跨平台能力
    • 垃圾收集(GC,Garbage Collection),通过垃圾收集器回收分配内存,大部分情况下,程序员不需要自己操心内存的分配和回收。
  • JRE和JDK
    • JRE,Java运行环境,包含了JVM和Java类库,以及一些模块等。
    • JDK,是JRE的一个超集,提供了更多工具,比如编译器、诊断工具等。
  • Java的解释执行。Java的源代码首先通过Javac编译成为字节码(bytecode),在运行时,通过JVM内嵌的解释器将字节码转换为机器码。
  • Java的编译执行。常见的JVM,都提供了JIT(Just-In-Time)编译器,即动态编译器,JIT能够在运行时将热点代码编译成机器码,这种情况下部分热点代码就属于编译执行。
    Java平台的蓝图

在运行时,JVM会通过类加载器(Class-Loader)加载字节码,解释或者编译执行。JDK8实际是解释和编译混合的一种模式,即所谓的混合模式(-Xmixed)。
通常运行在server模式的JVM,会进行上万次调用以收集足够的信息进行高效的编译,client模式这个门限是1500次。
Oracle Hotspot JVM内置了两个不同的JIT compiler,C1对应前面的client模式,适用于对于启动速度敏感的应用,如普通Java桌面应用;C2对应server模式,它的优化是为长时间运行的服务器端应用设计的。默认是采用所谓的分层编译。
Java虚拟机启动时,可以指定不同的参数对运行模式进行选择。
比如,指定-Xint,就是告诉JVM只进行解释执行,不对代码进行编译,这种模式抛弃了JIT可能带来的性能优势。因为解释器是逐条读入,逐条解释运行的。
-Xcomp,是告诉JVM关闭解释器,不要进行解释执行,或者叫做最大优化级别。会导致JVM启动变慢非常多,同时如果不进行profiling,往往不能对JIT编译器进行有效优化。
AOT(Ahead-of-Time Compilation),新的编译方式,直接将字节码编译成机器码,这样就避免了JIT预热等各方面的开销,比如Oracle JDK9就引入了实验性的AOT特性,并且增加了新的jaotc工具。

  • JVM作为一个强大的平台,本质上合规的字节码都可以运行,比如Clojure、Scala、Groovy、JRuby、Jython等大量JVM语言。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值