为什么需要指定Java堆大小?

ben*_*rre 18 java jvm jvm-arguments

我一直想知道,为什么Java要求你手动设置堆大小?我的印象是,需要为程序运行,直到OS可以分配没有更多的其他语言编写的程序仅分配尽可能多的内存下.

在Java世界中,我们需要设置堆,堆栈和permgen大小.虽然这是很简单的忘记增加这些以"足够大"的数字是排名第一的原因,我已经看到了服务器宕机.

为什么不能告诉Java随着时间的推移增加堆/ stack/permgen?

DJC*_*rth 7

三个原因:

  1. 因为Java旨在成为编写Web应用程序的语言.通常不认为让Web应用程序接管所有机器资源是个好主意.
  2. 因为Java是垃圾收集的.除了指定内存的上限外,堆大小也会触发垃圾回收.从本质上讲,你说的是"你可以使用这么多,但是当你达到这个极限时,你必须整理一下".
  3. 有许多类应用程序,您确实希望限制Java进程使用的内存量,例如,当两者的内存不足时,其他进程继续更为重要.
  4. 因为能够限制堆大小是一个功能.如果您喜欢该进程可以拥有无​​限内存的方法(与所提到的其他语言一样),那么您始终可以将堆限制设置为超出其可能获取的范围.如果要限制堆大小,可以这样做.其他语言只有其中一种可能的行为,使它们不那么灵活.

  • 你有第一点的来源吗?我之前从未听过"java是用于编写Web应用程序"的事情(并不是说我已经深入研究了java的历史,或者......) (2认同)
  • 神圣的错误适度.Java是Oak的后代,旨在实现机顶盒软件,就像你在复杂的有线电视调谐器中所拥有的那样.并且就垃圾收集而言,当对象不可访问时收集垃圾,而不是在达到内存限制时收集垃圾. (2认同)

Pet*_*ans 5

我的解释是,Sun是一家专注于销售Big Boxes的公司,他们喜欢系统管理员可以在这些盒子上做事.运行系统来填充所有内存是将其运行到地面并且无法有效采取操作来恢复操作的好方法,因为您无法分配内存来创建登录shell.