JVM
JVM即Java虚拟机,它是一个想象中的机器,通过它Java可以实现编译后的跨平台运行。
主要的JVM有
- Oracle的HostSpot。(原来叫Sun HostSpot)
- Oracle的JRockit。(原来叫Bea JRockit,本称为世界上最快的JVM)
- Google的Dalvik。(Google android的虚拟机,特点编译后dex文件比jar小很多,编译器对字节码进行了很多优化,使其变得更小)
HotSpot虚拟机
HotSpot由一个字节码解析器和两个JIT编译器组成。
- 字节码解释器:用于解释执行。负责将字节码解释成机器码。
- JIT编译器:用于编译执行。即时(动态)编译器,负责在运行的过程中动态的将一些热点(执行次数最多的方法)编译成本地机器码,并进行优化,保存起来,以便下次使用,从而提高运行效率。JIT编译器由客户端编译器和服务器端编译器组成。客户端编译器:是一种轻量级的编译器,编译时间更短,占用内存更少。服务器端编译器:是一种重量级的编译器,因进行大量的编译优化,所以编译时间更长,但执行效率更高。
HotSpot默认情况下是解释和编译混合执行的。如下mixed mode表示混合执行模式。
C:\Documents and Settings\tengfei.fangtf>java -version
java version "1.6.0_16"
Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) Client VM (build 14.2-b01, mixed mode, sharing)
JIT的参数:
- complileThreshold=1000 调用多少次即为热点。
- 代码内联的判断依据。
- -XX:+CITime JIT编译消耗的时间。
- -XX:+PrintCompilation 打印编译的方法。
堆设置参数:
-Xmx1024m:设置JVM最大可用内存为1024M。memory max
-Xms1024m:设置JVM初始内存为1024M。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。