JVM组成
JVM是什么?
是Java程序的运行环境,它的好处就是可以让Java代码一次编写,到处运行,就是在不同的操作系统中都可以使用这一套代码;还有她会有自动的内存管理,和垃圾回收机制
什么是程序计数器
它是线程私有的,每个线程都有一份,里边保存的是字节码的行号,用来记录正在执行的字节码的地址。
Java堆?
什么是虚拟机栈?
解释一下方法区?
介绍一下运行时常量池?
直接内存?
1它不属于jvm内存结构,不由jvm管理,它是虚拟机的系统内存
2常见NIO操作,用于数据缓冲区,分配回收成本高,但是读写性能很高,不受jvm内存回收管理
=======================================================================
类加载器
什么是类加载器?
因为jvm只会运行二进制文件,类加载器就是将字节码文件加载到jvm中,从而让Java程序能够启动起来。
类加载器都有哪些?
什么是双亲委派模型?
加载一个类的时候,先委托上一级的加载器进行加载,如果上级加载器也有上级,就继续向上委托,如上级没被加载的话,子加载器就会加载该类。
JVM为什么采用双亲委派机制?
可以避免一个类被重复加载保证了唯一性
保护了类库api不会被修改
======================================================================
垃圾回收机制
对象什么时候可以被垃圾回收器回收?
如果一个或多个对象没有任何引用指向它了,这就是垃圾,定位垃圾的话,就会被垃圾回收器回收
(定位垃圾的方式有两种:引用计数法和可达性分析算法)
jvm垃圾回收算法?
1 标记清除算法,根据可达性分析算法得出的垃圾进行标记,然后对其进行垃圾回收(会出现内存的碎片化,内存不连贯),这个是用的比较少的
2 标记整理算法 这个和标记清除算法差不多,对象移动内存位置,因为要整理,所以它效率会有些影响(老年代的垃圾回收器一般用这种)
3 复制算法(这个了解的不太多)
JVM有哪些垃圾回收器?
是有四种垃圾回收器的分别是:串行垃圾回收期,并行垃圾回收期,CMS垃圾回收器,G1垃圾回收器
串行垃圾回收期:使用单线程进行垃圾回收,堆内存比较小才会使用,一般我们个人电脑会使用
并行垃圾回收期:
CMS垃圾回收器:
G1(one)垃圾回收器:
应用于新生代和老年代,jdk9以后默认使用G1
采用的是复制算法
响应时间和吞吐量都还不错
======================================================================
jvm实践
说一下JVM调优的工具?
jconsole (J kang搜) :监控jvm的内存,线程,类
V(sou)VM:监控线程和内存
CPU飙高的排查方案:
可以通过top命令,查看CPU的情况,就可以查看哪一个进程占用的cpu较高
在使用ps命令查看进程中的线程信息,然后用jstack命令查看那些线程出现问题。