1.对Java平台的理解(仅总结,非原创)

  1. Java本身是一种面向对象的语言,最显著的特性有两个方面,一是所谓的“一次书写,到处执行”,能够非常容易的获得跨平台的能力,另一个就是垃圾收集,java通过垃圾收集器回收分配的内存,大部分情况下,程序员不需要自己操心内存的分配和回收;
  2. 我们日常会接触到JRE和JDK,JRE即运行环境,JDK比JRE多了一些编译器、诊断工具等;
  3. JAVA是解释执行这句话不太准确,JAVA源代码通过Javac编译成字节码,运行时,通过JVM内建的解释器将字节码转换成最终的机器码,但常用的Hotspot JVM 提供了 JIT(Just In Time)编译器,JIT编译器能够在运行时候动态的将热点代码编译为机器码,这时候,这些热点代码就是编译执行而不是解释执行了,AOT(Ahead-of-Time Compilation)编译方式能直接将源码编译为字节码,这样编译出来的代码也是编译执行而不是解释执行;
  4. 主流java版本中,都是以混合模式(-Xmixed)执行的,及既有解释执行,也有编译执行;server模式的JVM会进行上万次的调用,以收集足够的信息来进行优化,client模式是1500次,Hotspot JVM内置了C1 和C2两种不同的JIT编译器,C1对应client模式,C2对应server模式;
  5. “-Xint” :只进行解释执行,不对代码进行编译,抛弃了JIT可能带来的性能优势;
  6. “-Xcomp” : 告诉JVM关闭解释器,不进行解释执行,又叫最大优化级别,那是否就意味着最高效呢?未必,指定“-Xcomp”参数会导致JVM启动变慢非常多,同时有些JIT编译器的优化方式,比如分支预测,如果不进行Profiling,往往不能得到有效优化;
  7. AOT(Ahead-of-Time Compilation):直接将代码编译成机器码,避免了JIT的预热等开销,在JDK9中引入了实验性质的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
  8. Oracle JDK支持JIT和AOT协作使用,不是二选一的关系;
  9. JVM作为一个强大的平台,不仅仅只有java可以运行在其平台之上,本质上合规的字节码都可以在JVM中运行,如:Clojure,Scala,Jython,JRuby等JVM语言;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值