挖掘JVM坟头背景
应目前就业形势的广大面试官造火箭的客观要求,各位掘友是否开始了新一轮的掘坟头学习?手快的大佬已经在此复习了。迷茫的你是否这样?
步入正题
油斗地宫的位置分布图如下:
生死看淡不服就干
正所谓工欲善其事,必先利其器。打开idea来一个测试演示:
1.配置jvm参数
-Xmx10m 设置虚拟机堆内存最大值
-XX:+PrintStringTableStatistics 打印串表的统计信息
以下是打印垃圾回收内容 :
-XX+PrintGCDetails
-verbose:gc
2.随便找个坑
public static void main(String[] args) {
int i=0;
try{}
catch (Throwable e)
{
e.printStackTrace();
}finally {
System.out.println(i);
}
}
日志打印如下,这直接就把地宫看全了。。。。
3.继续深入
莫名其妙开车了,额...
public static void main(String[] args) {
int i=0;
try{
for(int j=0;j<10000;j++)
{
String.valueOf(j).intern();
i++;
}
}
catch (Throwable e)
{
e.printStackTrace();
}finally {
System.out.println(i);
}
}
intern是把堆中对象数据放入到串池中,修改后运行如下
[GC (Allocation Failure) [PSYoungGen: 2048K->504K(2560K)] 2048K->664K(9728K), 0.0007770 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
那么为什么entries没有达到1万多个呢?就是因为GC已经把之前没用的内容回收了。在之前是没有GClog的哦,很明显GC是会处理串池里的数据的。