【发布时间】:2012-11-21 15:17:54
【问题描述】:
我想在我的 Web 服务器上运行多个 Java 进程,每个 Web 应用程序一个。我正在使用一个具有大量支持类和 jar 文件的 Web 框架(Play),并且 Java 进程使用大量内存。一个 Play 进程显示大约 225MB 的“驻留私有”内存。 (我正在使用 Java 1.7.0_05 的 Mac OS X 上对此进行测试。)特定于应用程序的代码可能只有几 MB。我知道典型的 Java Web 应用程序是添加到一个服务器进程(Tomcat 等)的 jar,但似乎运行 Play 的标准方式是作为独立的应用程序/进程。如果这些是 C 程序,那 200MB 中的大部分将是共享库,并且不会在每个应用程序中复制。有没有办法在 Java 中实现这一点?我看到一些关于class data sharing 的页面,但这似乎只适用于核心运行时类。
【问题讨论】:
-
这不适用于 HotSpot,它需要一个支持它的专用 JVM。在我的环境中,我遇到了同样的问题:我们有一个带有许多简单节点的分布式架构,每个节点都是在自己的 JVM 中的单独的 Jetty 服务器。它们每个可能需要 1-2 MB,但至少需要 64 MB。
-
至于
class data sharing一些人have tried it before
标签: java memory jvm shared-libraries