我通过tomcat运行我的Java应用程序,并设置-Xms1024m,但是在启动应用程序后我发现Java堆的大小只有200~300m,我认为Xms意味着最小堆大小,为什么应用程序没有&# 39;应用程序启动后,达到最小堆大小1024m 立即?
编辑,BTW,JVM是热点7.0。
GC似乎就是这样做的 方法HeapRegion :: setup_heap_region_size(uintx min_heap_size)来自c ++文件\ openjdk-7-fcs-src-b147-27_jun_2011 \ openjdk \ hotspot \ src \ share \ vm \ gc_implementation \ g1 \ heapRegion.cpp,方法parse_each_vm_init_arg来自文件\ openjdk-7-fcs-src-b147- 27_jun_2011 \ openjdk \ hotspot \ src \ share \ vm \ runtime \ arguments.cpp,熟悉JVM GC源代码的人可以帮助对它进行一些分析。
答案 0 :(得分:0)
它只显示使用的空间。堆大小决定了每个区域的容量。注意:可用的实际大小较小,因为您有两个幸存者空间,并且在正常操作中只有一个处于活动状态。例如假设你有一个每个50 MB的幸存者空间,一个1 GB的堆将说只有950 MB可用。
设置最小堆大小时,这并不意味着空间已被使用。但是,在达到此堆大小之前(或者当堆的一部分的Eden已满时),您可能无法获得GC。
假设您有一个1 GB的堆,并且Eden空间为100 MB。即使使用了很少的使用空间,一旦Eden填满,您将获得GC。最终,Eden增长,终身空间开始填满,一旦它满了,它可能会使堆大小增加到大于你给它的最小堆大小。