应用Java构建的应用程序的堆大小应该是多少?

时间:2014-03-14 12:38:54

标签: java heap-memory

我们需要为普通服务器应用程序分配的堆大小是多少?对于Facebook,Twitter等大型应用程序应该是什么?

或者有没有办法可以动态增加应用程序的堆大小,以便我们不必担心堆分配?

2 个答案:

答案 0 :(得分:3)

Java堆大小是一个安全功能:它就在那里,所以Java程序不能通过分配无穷无尽的内存来简单地接管机器。

这就是为什么几乎没有Java VM根据需要增加堆"选项。

因此,几乎不可能事先告诉Java应用程序或服务器需要多少内存。您必须使用真实的生产数据运行它才能找到答案。有一些工具可以帮助你,但通常,你只是等待OutOfMemoryError,确保它不是由于一个错误,然后增加堆(专业人士认为它不是一个但是并简单地增加堆,然后修复错误,然后保持堆大小原样:-))。

PS:在这个网站上有一个问题" How can I give Java code more than 144 GB of RAM?"

答案 1 :(得分:2)

这是一个太普遍的问题,它取决于创建的对象数量,它们的寿命和它们的大小。

例如:

  • 如果您正在处理大数据结构,请说您将图像加载到内存中 - 您需要更大的堆。但是你需要考虑 - 这些图像是长寿的,还是它们被加载,操纵和死亡。如果他们快速死亡,你可能不得不改变老一代与年轻一代之间的比例(假设老一代只包含"常规"对象)

  • 你需要确保年轻一代的大小足够大,一方面不让任何一个对象变成老一代,但不要太大,这将导致计算活动对象的计算时间更长< / p>

  • 您可以调整幸存者空间的比例。如果几乎没有任何东西进入幸存者空间那么它应该相对较小。

有各种各样的事情要考虑,并且没有任何一种尺寸适合所有解决方案。

在这里,我喜欢的讲座可以让您了解GC调整的全部概念:Tuning the JVM

在您看到视频并获得一般性想法之后,我会推荐一篇我最近阅读的好文章,以深入了解GC和JVM调优:Java SE 6 HotSpot[tm] Virtual Machine Garbage Collection Tuning