首先,要明白JVM是一套标准,那有的小伙伴要问了,平常我们说的JVM虚拟机运行,不就是实际的环境吗?先别急,慢慢来。
JVM呢,他是指定义虚拟机,可以像正常计算机一样运行程序,它的好处,就是屏蔽一些计算机复杂的细节,另外还可以一次编译可以到处执行;
目前市面上实现了JVM标准的厂商有hotSpot、JRockit、IBM J9;我们平常使用的oracle jdk和openJdk都是hotSpot,这个就是小伙伴们常说的“JVM”;
下面我们来说一下常使用的hotSpot VM:
hotSpot VM主要是由三大部分组成:类加载器、运行时数据区、执行引擎。类加载器就是把编译过后的.class文件,查找和验证后,进行分配内存空间和赋值。运行时数据区就是java代码运行时,所产生的数据存放的空间。主要是由五部分组成:Method Area、Heap、java stack、program counter register、native method stacks,下面逐步介绍这五部分的用处。
Method Area:方法区,就是平常我们所说的常量池;
Heap:堆,存放一些对象实例,平常我们new出来的对象就是存放在这;
java stack:通过线程运行和加载各种的方法;
program counter register:负责记录每个线程执行的地址;
native method stacks:本地native方法执行的区域;
运行时数据区就是通过这五部分进行逻辑的执行和数据的交换。
下面说下这个执行引擎,他主要是包含JIT compiler 和GC。
JIT编译器主要有两种,一种是解释执行,他把.class文件当成程序员的输入,不等待全部编译后就直接执行,这样省去了很多编译时间;另外一种就是编译执行,他是一次性读取所有的文件,然后再到计算机中去执行,相对来说,编译执行的效率更高、占用内存更小,hotSpot是两种共同使用的。
GC就是我们平常所说的垃圾回收器,他把一些无用的资源进行回收,释放资源。垃圾回收算法主要有三种:复制算法、标记清除算法、标记整理算法;这个是可以通过JVM参数进行指定的。
最后,我们再谈一下JNI,这也是JVM提供的一种技术,我们可以通过JNI调用C或C++的代码,还可以调用动态链接库以及DLL文件等;
各流程间关系见下图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律