发布Java Heap Sapce

时间:2017-04-11 09:16:14

标签: memory-management java-8 garbage-collection heap jvm-hotspot

我遇到了java性能问题。我尝试使用GC1,但它并没有让事情变得更好。我唯一的问题是为什么JVM保留了java堆空间,即使它没有被使用? 正如你在图片中看到的那样,批量工作在10:30左右完成,但垃圾收集器没有被触发清理。所以我在10:52手动完成,然后释放了已用过的空间,但JVM仍然分配了堆(8GB)。为什么? Java Memory Problem

3 个答案:

答案 0 :(得分:3)

我做过与你做过的完全相同的事情时也看到了这种趋势(并在这里看到)。解释非常简单:JVM不会向操作系统返回内存,即使它有很多空闲内存。我不知道why的具体细节,但这与从OS回忆内存费用昂贵(这是超简化的)这一事实有关。 / p>

所以我想这里的简单答案是 - 这是正常的。

在这里!我找到了我实际阅读过this的地方。

答案 1 :(得分:1)

G1GC与应用程序线程同时执行全堆操作,例如全局标记。 这可以防止与堆成比例的中断。

通过G1GC是一个新时代的垃圾收集算法,只有在以下情况下才能从CMS或老年垃圾收集中切换:

  • 超过50%的Java堆被实时数据占用。
  • 对象分配率或促销率显着不同。
  • 不期望的长垃圾收集或压缩暂停(超过0.5到1秒)

有关G1内部工作的更多详细信息,请访问:http://docs.oracle.com/javase/7/docs/technotes/guides/vm/G1.html

答案 2 :(得分:0)

仅当应用程序需要额外内存时才会触发GC。 gc是昂贵的任务,vm将决定何时运行它。如果您怀疑您的程序需要内存并且GC没有释放它,那么这是一个问题。如果您可以分享解决此问题的测试用例,我们将解决此问题。

相关问题