|
|
1
7
你的问题的标题是误导的(不是故意的,我知道):Pommisits问题(而且有很多,我是第一个诊断Tomcat/Sun PyMGEN问题的人之一,当还没有关于这个问题的任何知识)不是Java特定性,而是Sun VM专一性。 如果您使用的是不使用永久代的虚拟机(比如说,如果我没有弄错的话,使用IBM虚拟机),那么您就不能有永久代问题。 所以它不是一个“Java”问题,而是一个Sun VM实现问题。 |
|
|
2
5
Java让你对内存有更多的控制——为想要的人敲击一个 应用 这里的控件与Ruby、Perl和python相比,后者提供了更少的控制权。Java的典型实现也是非常耗时的(因为它有一个更先进的垃圾收集方法)WRT动态语言的典型实现…但是如果你看Jruby或Jython你会发现 不 一个语言问题(当这些不同的语言使用相同的底层虚拟机时,内存问题几乎是相等的)。我不知道一个广泛使用的“JVM上的Perl”实现,但是如果有一个实现,我敢打赌,它在足迹方面与JRuby或Jython不会有明显的不同! |
|
|
3
1
python/perl/ruby使用malloc()或对其进行优化来分配内存。堆空间的限制由操作系统而不是虚拟机决定,因此不需要-xmxn这样的选项。此外,垃圾收集更简单,主要基于引用计数。所以要微调的地方要少得多。 此外,动态语言往往使用字节码解释程序而不是JIT编译器来实现,因此它们无论如何都不会用于性能关键的代码。 |
|
|
4
0
JavaWordPoFor和Alex Martelli的答案的本质似乎是正确的:Java有一套高级的GC选项,有时需要调整它们。但是,我仍然不完全清楚为什么您可以设计一个有或没有永久一代的JVM。在Java中,我发现了一堆有用的垃圾收集链接,但不一定与其他的GC语言相比较。简要地:
如果有人有更多的细节,很高兴更新这个答案。 |
|
|
5
-1
这是因为Tomcat在Java虚拟机中运行,而其他语言是编译或解释的,并且与实际机器运行。当您设置-xmx和-xms时,您会说您希望JVM像一台RAM量在设置范围内的计算机一样运行。 我认为这么多人遇到这种情况的原因是,默认值相对较低,人们很快就会达到默认上限(而不是像其他语言那样等待实际RAM用完)。 |