JVM(JAVA Virtual Machine)Java虚拟机

风陵南·2023-09-08 17:26·57 次阅读

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 @   风陵南  阅读(57)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
历史上的今天:
2022-09-08 数据库设计 -- 多表关系的实现
2022-09-08 数据库设计简介
点击右上角即可分享
微信分享提示