Java Tomcat使用什么内存类型以及如何控制它

Java Tomcat使用什么内存类型以及如何控制它,java,memory,tomcat,Java,Memory,Tomcat,我知道Tomcat在运行时会使用几种内存类型 我使用过的唯一一种方法是java堆。它可以通过类似于'-Xmx128M-Xms64M'的JAVA_OPTS env属性进行控制 我发现还有-XX:MaxPermSize、-XX:MaxNewSize等等 我问这个问题的原因是,我试图在200Mb RAM内存上启动Tomcat5.5(它是VPS服务器)。我已经用“-Xmx128M-Xms64M”设置了java堆大小,但似乎从启动开始它就消耗了更多的资源(如果可以启动的话。有时启动会立即失败,出现OutO

我知道Tomcat在运行时会使用几种内存类型

我使用过的唯一一种方法是java堆。它可以通过类似于'-Xmx128M-Xms64M'的JAVA_OPTS env属性进行控制

我发现还有-XX:MaxPermSize、-XX:MaxNewSize等等

我问这个问题的原因是,我试图在200Mb RAM内存上启动Tomcat5.5(它是VPS服务器)。我已经用“-Xmx128M-Xms64M”设置了java堆大小,但似乎从启动开始它就消耗了更多的资源(如果可以启动的话。有时启动会立即失败,出现OutOfMemoryException),并且没有部署任何应用程序

值得注意的是,若我启动maven的tomcat插件,它就可以正常工作。只有单独的tomcat在内存中失败


提前感谢您的想法。

正如您所说,堆内存只是JVM的内存池之一,还有其他内存池

阅读本文,了解它们是什么,如何控制它们,以及如何监控它们:

堆和非堆内存

JVM管理两种内存: 堆内存和非堆内存,均已创建 当它开始的时候

堆内存是运行时数据区域 JVM从中分配内存 对于所有类实例和数组。 堆可以是固定的,也可以是可变的 尺寸。垃圾收集器是一个 自动内存管理系统 为对象回收堆内存

非堆内存包括一个方法区域 在所有线程和内存之间共享 需要进行内部处理 或者JVM的优化。它存储 每类结构,如运行时 恒定池、字段和方法数据, 以及方法和方法的代码 构造器。方法区域为 逻辑上是堆的一部分,但是, 根据实现的不同,JVM可能会 不要垃圾收集或压缩它。 与堆一样,方法区域可能是 大小固定或可变的。记忆 对于方法区域,不需要 相邻

除了方法区域之外,还有一个JVM 实现可能需要内存来执行 内部处理或优化 它也属于非堆内存。 例如,JIT编译器需要 用于存储本机计算机的内存 从JVM代码翻译的代码 高性能

有关设置java堆大小的一些提示,请阅读。很奇怪,Tomcat甚至在没有部署任何应用程序的情况下也会给您OutOfMemoryException。也许您的配置有问题(您使用的是什么操作系统,如何启动Tomcat?)