代码演示GC回收
创始人
2024-04-11 08:41:28
0

JVM配置

-XX:NewSize=5m 初始新生代大小
-XX:MaxNewSize=5m 最大新生代大小
-XX:InitialHeapSize=10m 初始堆大小 等同于Xms
-XX:MaxHeapSize=10m 最大堆大小 等同于Xmx
-XX:SurvivorRatio=8 Eden区占80%
-XX:PretenureSizeThreshold=10m 大对象阈值
-XX:+UseParNewGC 新生代使用ParNew
-XX:+UseConcMarkSweepGC 老年代使用CMS
-XX:+PrintGCDetils:打印详细的gc日志
-XX:+PrintGCTimeStamps:这个参数可以打印出来每次GC发生的时间
-Xloggc:gc.log:这个参数可以设置将gc日志写入一个磁盘文件

代码

public class ParNew {public static void main(String[] args) {System.out.println("main方法压入栈帧-----");int size = 1024 * 1024;System.out.println("在main的栈帧内创建一个arrarray11变量,并在eden区开辟一块1m的内存,变量arr1指向这块你内存");byte[] array1 = new byte[size];System.out.println("在堆内存的Eden区中创建第二个数组,并且让局部变量指向第二个数组,第一个数组就没人引用了,此时第一个数组就成了没人引用的“垃圾对象”");array1 = new byte[size];System.out.println("在堆内存的Eden区内创建了第三个数组,同时让array1变量指向了第三个数组,此时前面两个数组都没有人引用了,就都成了垃圾对象");array1 = new byte[size];System.out.println("array1这个变量什么都不指向了,此时会导致之前创建的3个数组全部变成垃圾对象");array1 = null;System.out.println("此时会分配一个2MB大小的数组,尝试放入Eden区中,但是Edeb区只剩1m了,所以会触发Minor GC");byte[] arr2 = new byte[2 * size];}
}

代码分析

  1. byte[] arr1 = new byte[size];这行代码一旦运行,就会在JVM的Eden区内放入一个1MB的对象,同时在main线程的虚拟机栈中会压入一个main()方法的栈帧,在main()方法的栈帧内部,会有一个“array1”变量,这个变量是指向堆内存Eden区的那个1MB的数组,如下图。

在这里插入图片描述

  1. array1 = new byte[size];此时会在堆内存的Eden区中创建第二个数组,并且让局部变量指向第二个数组,然后第一个数组就没人引用了,此时第一个数组就成了没人引用的“垃圾对象”了,如下图所示。
    在这里插入图片描述

  2. array1 = new byte[size];这行代码在堆内存的Eden区内创建了第三个数组,同时让array1变量指向了第三个数组,此时前面两个数组都没有人引用了,就都成了垃圾对象,如下图所示。
    在这里插入图片描述

  3. array1 = null;这行代码一执行,就让array1这个变量什么都不指向了,此时会导致之前创建的3个数组全部变成垃圾对象,如下图。
    在这里插入图片描述

  4. byte[] arr2 = new byte[2 * size];此时会分配一个2MB大小的数组,尝试放入Eden区中,因为Eden区总共就4MB大小,而且里面已经放入了3个1MB的数组了,所以剩余空间只有1MB了,此时你放一个2MB的数组是放不下的,所以这个时候就会触发年轻代的Young GC。

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...