JVM的跨平台性
一次编写,到处运行
JVM将字节码文件编译成对应操作系统的机器码
JVM的语言无关性
JVM的解释执行
字节码文件会按照顺序执行 ,字节码文件先被加载到jvm中,执行引擎根据字节码指令逐行解释成本地机器码
JIT——即时编译器
逐行解释代码——运行速度比较慢
jvm还有一种另外的情况 (是否为热点代码)
- 热点代码:某方法调用了一万次,或者某个循环调用了一万多次,此时jvm会将这些代码判定为热点代码
若为热点代码,则会通过JIT(即时编译器)直接将热点代码翻译成本地机器码指令
对象是否一定在堆中创建
- 几乎所有对象都在堆中创建
如果new对象的代码为非热点代码,则一定在堆中创建
如果new对象的代码为热点代码,则会经过JIT(即时编译器)从而出现不在堆中创建的情况,JIT即时编译器中还有优化技术,比如判断new出来的对象是否可以逃逸出出方法或者线程,如果不能,再判断jvm是否开启标量替换,如果jvm开启了标量替换则在栈中创建该对象
标量替换:堆里面的对象,最重要的是它的成员变量,这些成员变量能否在栈中进行替换,如果能则可以标量替换