我正在32位Windows操作系统上使用Java JRE启动Java客户端。
java -Xmx1024m -Xms1024m -verbose:gc -XX:+PrintGCDetails -jar myJar.jar
我的jar包含大量数据(双倍表,约600 MB),这些数据在整个应用程序的生命周期中都会保存在内存中。
然后,每隔一分钟左右,它会给出日志消息,如下所示:
[GC [DefNew:279616K-> 279616K(314560K),0.0002037秒][Tenured:595827K-> 599952K(699072K),1.1020398秒] 875443K-> 599952K(1013632K),[Perm:10042K-> 10042K(16384K)],1.1030218秒] [Times:user = 1.09 sys = 0.01,real = 1.11秒]
我真的不理解加粗部分。它说新一代从279616K到279616K(即没有变化),老一代略微增加(595827K-> 599952K),但总体上说是875443K-> 599952K,即减少了约30%。这怎么可能呢?
编辑:为了完全清楚,我希望如果我加上279616K+595827K=875443K,我会得到粗体的第一部分,也就是总堆大小。同样,我希望279616K+599952K将总和第二部分的粗体,但它没有。在下面指定的链接Java垃圾收集日志消息中,它会相加,所以我可能遗漏了什么。