1.jvm是什么
首先,jvm是一种标准,实现是由各大厂商实现,主要是sum和oracle开发,目前主主流的是Hotspot虚拟机,jvm用虚拟机的意义就是它可以跨平台。
2.jvm怎么运行的
那么,虚拟机的运行过程是怎么样的呢?如下图,jvm从磁盘上读取出已经编译好的Class files字节码文件。
然后jvm通过Class loader这个类装载器子系统把前面的字节码文件加载上来,不同的字节码文件会有对应不同的类装载器。
类装载器然后将字节码文件加载到运行时数据区中,将字节码文件读取分析后生成一系列对象,类装载器通过方法区将字节码文件从磁盘加载到内存中,接下来分解这个方法所用到的基础数据类型到栈中,将这个方法new的对象到堆中。我们在运行时数据区中还有个本地方法栈,它会调用我们当前运行时机器本地的接口,如id地址、访问网络、访问磁盘等等。运行时数据区中还有一个程序计数器,这是在多线程中与线程绑定的,那还有我们栈也是和线程绑定的,在这中有很多栈针,将栈针压成一组栈,这个栈会跟线程一起消失,所以这个栈是不需要垃圾回收的
3.jmm内存管理
jmm也是jvm的一部分,它是管理jvm的内存访问,我们Java对于内存的访问是Java虚拟出来的内存空间中,但实际上是在操作系统的物理内存中的,所以jmm就帮我们规定了一套jvm到物理内存之间的映射关系的标准或方式
4.垃圾回收器
我们在new对象的时候会在新生代中产生很多垃圾,这里面垃圾可以使用我们之前讲过的复制清除算法,但老年代中的数据常年积攒,满的时候就触发g1操作,但是老年代的心理是非常慢的,在这个清理的过程会产生stw操作,产生这个操作会除了清理垃圾的线程之外的线程全部暂停,所以我们要尽量减少这段时间,g1就可以解决这些问题,通过可达性算法可知查找是非常缓慢的,所以我们将查找和用户线程并行,这样的时候我们就只用stw一段时间用来删除这些找到的垃圾
所以关键点:
1.jvm标准与实现
2.解决了跨平台问题
3.JMM内存管理
4.JVM模型
5.不同的垃圾回收器
答案:jvm是java虚拟机,我们的class文件运行在虚拟机上,通过虚拟机解决了跨平台的问题,jvm中有jmm来管理java内存访问的方式,不同的jvm实现性能上有差异,现在主流的实现是Hotspot,垃圾回收器是G1,jvm运行时内存中分为方法区,堆,栈,本地方法栈,执行代码时需要执行引擎