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开启了标量替换则在栈中创建该对象
标量替换:堆里面的对象,最重要的是它的成员变量,这些成员变量能否在栈中进行替换,如果能则可以标量替换
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2022-09-08 数据库设计 -- 多表关系的实现
2022-09-08 数据库设计简介