Java8默认使用的垃圾收集器是什么?
Java8版本的Hotspot JVM,默认情况下使用的是并行垃圾收集器(Parallel GC)
如果CPU使用率飙升,如何排查?
1.先通过top定位到消耗最高的进程id
2.执行top -h pid单独监控该进程
3.在2中输入H,获取当前进程的所有线程,找到消耗最大的线程编号tid
4.jstack tid 对当前线程做dump,输出所有线程信息,在堆栈信息中找到原因
CMS,G1垃圾回收器三色标记
三色标记法是一种垃圾回收法,他可以让JVM不发生或仅短时间发生STW(stop the world),从而达到清除JVM垃圾的目的。
·白色:表示对象尚未被垃圾收集器访问过。显然在可达性分析刚刚开始的阶段,所有的对象都是 白色的,若在分析结束的阶段,仍然是白色的对象,即代表不可达。 ·黑色:表示对象已经被垃圾收集器访问过,且这个对象的所有引用都已经扫描过。黑色的对象代 表已经扫描过,它是安全存活的,如果有其他对象引用指向了黑色对象,无须重新扫描一遍。黑色对 象不可能直接(不经过灰色对象)指向某个白色对象。 ·灰色:表示对象已经被垃圾收集器访问过,但这个对象上至少存在一个引用还没有被扫描过。
讲一讲类加载和类加载器
一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)七个阶段,其中验证、准备、解析三个部分统称、为连接(Linking)。
在加载阶段,Java虚拟机需要完成以下三件事情: 1)通过一个类的全限定名来获取定义此类的二进制字节流。 2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。 3)在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。
执行类记载的代码是类加载器。
双亲委派机制
双亲委派模型的工作过程是:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加 载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的 加载请求最终都应该传送到最顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请 求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去完成加载。
使用双亲委派模型来组织类加载器之间的关系,一个显而易见的好处就是Java中的类随着它的类 加载器一起具备了一种带有优先级的层次关系。例如类java.lang.Object,它存放在rt.jar之中,无论哪一 个类加载器要加载这个类,最终都是委派给处于模型最顶端的启动类加载器进行加载,因此Object类 在程序的各种类加载器环境中都能够保证是同一个类。反之,如果没有使用双亲委派模型,都由各个 类加载器自行去加载的话,如果用户自己也编写了一个名为java.lang.Object的类,并放在程序的 ClassPath中,那系统中就会出现多个不同的Object类,Java类型体系中最基础的行为也就无从保证,应 用程序将会变得一片混乱。
G1收集器
堆空间比较大,垃圾优先,那块垃圾多先清理那一块。
(1)空间整合Region
(2)多线程+并发+可预测停顿
多线程是多个GC垃圾回收器。在并发标记阶段业务线程和GC线程同时运行,并发的时候减少停顿。
有什么手段排查OOM的问题?
JDK1.8推荐生产环境开启两个参数:
-XX: HeapDumpOutOfMemoryError 当OOM发生时自动dump堆内存信息
-XX: HeapDumpPath=/tmp/headump.hprof dump堆内存信息存放目录
VisualVM查看那个位置由于什么原因造成了OOM
(JHSDB,JConsole,ViualVM,Java Mission Control)
使用过那些jvm相关的工具?
jps: 可以列出正在运行的虚拟机进程,显示出PID。
jstat: 是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程[1]虚拟机进程中的类加载、内存、垃圾收集、即时编译等运行时数据。
jinfo: 实时查看和调整虚拟机各项参数。
jmap: 生成堆转储快照(一般称为heapdump或dump文件。
jhat: 分析jmap生成的堆转储快照。
jstack: 生成虚拟机当前时刻的线程快照。
线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的目的通常是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间挂起等,都是导致线程长时间停顿的常见原因。线程出现停顿时通过jstack来查看各个线程的调用堆栈,就可以获知没有响应的线程到底在后台做些什么事情,或者等待着什么资源。