JVM常用基础参数-PrintGCDetails回收前后对比

JVM常用基础参数-PrintGCDetails回收前后对比

大厂面试题:

1、JVM垃圾回收时候如何确定垃圾?是否知道什么是GC Roots

2、你说你做过JVM参数调优和参数配置,请问如何盘点查看JVM系统默认值

3、你平时工作中用过的JVM常用基本配置参数有哪些?

4、强引用、软引用、弱引用、虚引用费别是什么?

5、请你谈谈对OOM的认识

6、GC垃圾回收算法与垃圾收集器的关系?分别是什么请你谈谈?

7、 怎么查看服务器默认的垃圾回收器是哪一个?

       生产上如何配置垃圾收集器的?

       谈谈你对垃圾收集器的理解?

8、G1垃圾收集器

9、生产环境服务器变慢,诊断思路和性能评估谈谈?

10、假如生产环境CPU占用过高,请谈谈你的分析思路和定位。

11、对于JDK自带的监控和性能分析工具用过哪些?一般你怎么用的?

 

1、JVM常用参数

-Xms                                       初始堆内存大小,默认物理内存64/1

                                               -Xms = -XX:InitialHeapSize

 

-Xmx                                         最大堆内存,默认物理内存4/1

                                                 -Xmx = -XX:MaxHeapSize

 

-Xss                                           栈内存大小

                                                  设置单个线程栈大小,一般默认512~1024kb。

                                                  单个线程栈大小跟操作系统和JDK版本都有关系

                                                  -Xss = -XX:ThreadStackSize

 

-Xmn                                        年轻代大小

 

-XX:MetaspaceSize                  元空间大小

                                                  元空间本质跟永久代类似,都是对JVM规范中方法区的实现。

                                                  不过元空间与永久代最大的区别在于:元空间并不在虚拟机中,而是使用本机内存。

                                                  因此,元空间大小仅受本地内存限制。

 

-XX:+PrintGCDetails                   打印GC详细日志信息

 

-XX:SurvivorRatio                       幸存者比例设置

-XX:NewRatio                             新生代比例设置

-XX:MaxTenuringThreshold        进入老年代阈值设置

 

2、配置-XX:+PrintGCDetails参数

(1)打印GC详细日志信息

JVM常用基础参数-PrintGCDetails回收前后对比_第1张图片

JVM常用基础参数-PrintGCDetails回收前后对比_第2张图片

(2)模拟YoungGC和Full GC

【1】配置初始堆内存和最大堆内存

JVM常用基础参数-PrintGCDetails回收前后对比_第3张图片

【2】模拟创建大对象

public class PrintGCDetailsDemo {

    public static void main(String[] args) {

        System.out.println("Hello PrintGCDetails!");

        // 模拟创建大对象,出发YoungGC和Full GC

        byte[] byteArray = new byte[10 * 1024 * 1024];

 

    }

}

【3】运行PrintGCDetailsDemo程序

GC = Minor GC年轻代垃圾回收

Full GC = Minor GC + Old GC年轻代垃圾回收 + 老年代垃圾回收

Java.lang.OutOfMemoryError: Java heap Space堆空间不足OOM

JVM常用基础参数-PrintGCDetails回收前后对比_第4张图片

【4】年轻代和年老代垃圾回收分析

GC = Minor GC分解图:

JVM常用基础参数-PrintGCDetails回收前后对比_第5张图片

Full GC = Minor GC + Old GC分解图:

JVM常用基础参数-PrintGCDetails回收前后对比_第6张图片

JVM常用基础参数-PrintGCDetails回收前后对比_第7张图片

Hello PrintGCDetails!

[GC (Allocation Failure) [PSYoungGen: 2048K->496K(2560K)] 2048K->713K(9728K),

0.0016013 secs] [Times: user=0.02 sys=0.00, real=0.00 secs]

分解:

[GC (Allocation Failure)

GC表示YoungGC年轻代垃圾回收;

(Allocation Failure)表示内存分配失败;

[PSYoungGen: 2048K->496K(2560K)]

2048K表示年轻代垃圾回收前内存占用大小;

496K表示年轻代垃圾回收后内存占用大小;

(2560K)表示年轻代总大小;

2048K->713K(9728K)

2048K表示堆内存垃圾回收前内存占用大小;

713K表示堆内存垃圾回收后内存占用大小;

(9728K)表示堆内存总大小;

0.0016013 secs]

0.0016013 secs表示YoungGC耗时

[Times: user=0.02 sys=0.00, real=0.00 secs]

user=0.02表示用户耗时

sys=0.00表示系统耗时

real=0.00表示真实耗时

secs表示时间单位秒

 

[GC (Allocation Failure) [PSYoungGen: 496K->480K(2560K)] 713K->729K(9728K), 0.0022742 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]

同上可得

 

 

[Full GC (Allocation Failure) [PSYoungGen: 480K->0K(2560K)] [ParOldGen: 249K->680K(7168K)] 729K->680K(9728K), [Metaspace: 3259K->3259K(1056768K)], 0.0076754 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]

 

分解:

[Full GC (Allocation Failure)

Full GC表示YoungGC+OldGC(年轻代垃圾回收+年老代垃圾回收);

(Allocation Failure)表示内存分配失败;

[PSYoungGen: 480K->0K(2560K)]

480K表示年轻代垃圾回收前内存占用大小;

0K表示年轻代垃圾回收后内存占用大小;

(2560K)表示年轻代总大小;

[ParOldGen: 249K->680K(7168K)]

249K表示老年代垃圾回收前内存占用大小;

680K表示老年代垃圾回收后内存占用大小;

(7168K)表示老年代总大小;

729K->680K(9728K)

729K表示堆内存回收前内存占用大小;

680K表示堆内存回收后内存占用大小;

(9728K)表示堆内存总大小;

[Metaspace: 3259K->3259K(1056768K)]

Metaspace表示元空间;

3259K表示元空间垃圾回收前占用大小;

3259K表示元空间垃圾回收后占用大小;

(1056768K)表示元空间总大小

 

[GC (Allocation Failure) [PSYoungGen: 0K->0K(2560K)] 680K->680K(9728K), 0.0003449 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]

同上可得

 

[Full GC (Allocation Failure) [PSYoungGen: 0K->0K(2560K)] [ParOldGen: 680K->664K(7168K)] 680K->664K(9728K), [Metaspace: 3259K->3259K(1056768K)], 0.0069613 secs] [Times: user=0.08 sys=0.00, real=0.01 secs]

同上可得

 

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

       at com.wwl.jvm.PrintGCDetailsDemo.main(PrintGCDetailsDemo.java:7)

OOM

你可能感兴趣的:(Java,Java,JUC分析)