JVM(JAVA Virtual Machine)Java虚拟机

JVM的跨平台性

一次编写,到处运行

JVM将字节码文件编译成对应操作系统的机器码

JVM的语言无关性

JVM的内存区域

  • 虚拟机栈:在JVM运行过程中存储当前线程运行方法所需的数据,指令、返回地址
  • 本地方法栈:本地方法栈是和虚拟机栈非常相似的一个区域,它服务的对象的native方法
  • 程序计数器:主要用来记录各个线程执行的字节码地址
  • 方法区:存放类的信息、常量池、方法数据、方法代码
  • :堆是JVM上最大的内存区域,我们申请的几乎所有的对象,都是在堆中存储

  

JVM的解释执行

字节码文件会按照顺序执行 ,字节码文件先被加载到jvm中,执行引擎根据字节码指令逐行解释成本地机器码

JIT——即时编译器

逐行解释代码——运行速度比较慢

jvm还有一种另外的情况 (是否为热点代码)

  • 热点代码:某方法调用了一万次,或者某个循环调用了一万多次,此时jvm会将这些代码判定为热点代码

若为热点代码,则会通过JIT(即时编译器)直接将热点代码翻译成本地机器码指令

对象是否一定在堆中创建

  • 几乎所有对象都在堆中创建

如果new对象的代码为非热点代码,则一定在堆中创建

如果new对象的代码为热点代码,则会经过JIT(即时编译器)从而出现不在堆中创建的情况,JIT即时编译器中还有优化技术,比如判断new出来的对象是否可以逃逸出出方法或者线程,如果不能,再判断jvm是否开启标量替换,如果jvm开启了标量替换则在栈中创建该对象

标量替换:堆里面的对象,最重要的是它的成员变量,这些成员变量能否在栈中进行替换,如果能则可以标量替换

 

 

posted @ 2023-09-08 17:26  风陵南  阅读(67)  评论(0)    收藏  举报