
回复
用如下JVM参数运行代码:
GC日志打印选型:
加上该参数后,JVM参数如下:
该行会在JVM Eden内放入一个1M数组,同时在main线程的虚拟机栈压入一个main方法栈帧,其栈帧内部有一“arr1”变量,该变量指向Eden的那1M数组:
此时会在Eden创建第二个数组,局部变量指向其。然后第一个数组无人引用,成了垃圾:
在Eden创建第三个数组,同时让arr1指向第三个数组,此时前两个数组都无人引用,都成了垃圾:
arr1啥都不指了,导致之前创建的3数组全部变成垃圾:
分配一个2MB大小的数组,尝试放入Eden,这时Eden放的下吗?
显然不行,Eden共4M,已放入3个1M数组,只剩1M,所以这时就会触发Y-GC。
然后运行即可,运行完后,会出现gc.log文件,即本次程序运行的gc日志:
打开gc.log文件,我们会看到如下所示的gc日志: