1、虚拟机有多种,遵守Java虚拟机规范,如HotSpot, JRockit, J9
2、虚拟机运行字节码,对于热点代码缓存为机器指令,提高运行速度
3、不同操作系统运行不同的虚拟机,建立一个桥,以实现
跨平台功能
4、不同的语言只要按照字节码规范编译为虚拟机字节码,都可以执行,如JRuby、Groovy等
5、自动
内存管理,多种垃圾收集器(GC),Serial、
CMS,对应不同内存区域
6、虚拟机查看
管理工具若干,
图形化的有JConsole,而Visual VM在JDK9中已经不存在了
7、虚拟机栈(Stack)是按
线程区分的
8、GC时需要让线程跑到安全点或安全区域,以防止内存整理时的并发,分析工具可查看是否触发
全局停运(Stop-The-World)
9、并行或串行GC各有利弊,可根据生产环境设定
合理的参数(时间、空间优先)
10、Stack是栈,Heap是堆,还有Direct堆,用于DirectBuffer等,Direct堆由Full GC管理,或者手动clean
----刚学到这里