我知道Tomcat在运行时会使用几种内存类型。
我唯一使用过的 - java堆。它可以通过JAVA_OPTS env属性控制,类似'-Xmx128M -Xms64M'
我发现还有-XX:MaxPermSize,-XX:MaxNewSize等。
我问的原因是我试图在200Mb RAM内存上启动Tomcat5.5(它是VPS服务器)。我已经使用'-Xmx128M -Xms64M'设置了java堆大小,但是它似乎从启动它消耗了更多(如果有的话可以启动。有时启动失败,直接使用OutOfMemoryException),没有部署应用程序< / p>
值得注意的是,如果我启动maven的tomcat插件,它就可以了。只有单独的tomcat会因内存而失败。
提前感谢您的想法。
答案 0 :(得分:2)
正如你所说,堆内存只是JVM的一个内存池,还有其他内存池。
阅读本文以了解它们是什么,如何控制它们以及如何监控它们:
http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html
堆和非堆内存
JVM管理两种内存: 堆和非堆内存,都是创建的 什么时候开始。
堆内存是运行时数据区 JVM从中分配内存 适用于所有类实例和数组。 堆可以是固定的或可变的 尺寸。垃圾收集器是一个 自动记忆管理系统 回收对象的堆内存。
非堆内存包括方法区域 在所有线程和内存之间共享 内部处理所需 或JVM的优化。它存储 每类结构,如运行时 常数池,字段和方法数据, 以及方法和代码 构造函数。方法区域是 逻辑上是堆的一部分,但是, 根据实现,JVM可以 不是垃圾收集或压缩它。 像堆一样,方法区域可能是 固定或可变大小。记忆 对于方法区域不需要 是连续的。
除了方法区域外,还有一个JVM 实现可能需要内存 内部处理或优化 它也属于非堆内存。 例如,JIT编译器需要 用于存储本机的内存 从JVM代码翻译的代码 高绩效。
答案 1 :(得分:0)
阅读here以获取有关设置Java堆大小的一些提示。很明显,即使没有部署任何应用程序,Tomcat也会为您提供OutOfMemoryExceptions。也许您的配置有问题(您使用的操作系统是什么,如何启动Tomcat?)。