JVM(Hotspot)

java虚拟机是运行在操作系统之上的,它与硬件没有直接的交互!!!
程序运行的过程

类加载器

运行时数据区

- 99%的垃圾回收操作都是在堆上,所谓的JVM调优实际上就是在对堆的一个调优!!!
执行引擎

JDK不同版本JVM变化
jdk6:存在永久代,静态变量存放在永久代。
jdk7:存在永久代,逐步去永久代;将字符串常量池和静态变量移动到了堆空间中。
jdk8:永久代,类型信息、字段、方法、常量保存在本地内存的元空间(Metaspace),字符串常量池、静态变量仍然在堆中。
思考
为什么将字符串常量池移入到堆中?(为什么去永久代,改为元空间?)
- 字符串存在永久代中,容易出现性能问题和内存溢出,因为字符串应该是程序中非常常用的。
- 类及方法的信息等比较难确定大小,因此对于永久代的大小指定比较困难。
- 永久代会为GC带来不必要的复杂度,并且回收效率很低。
- Oracle将HotSpot与JRockit合二为一,借鉴了后者虚拟机的优点。
其他虚拟机
BEA JRockit,IBM J9不做过多介绍。



