gpt4 book ai didi

java - 多个 JVM 进程是否可以共享公共(public)类的内存?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:59:30 24 4
gpt4 key购买 nike

我想在我的网络服务器上运行多个 Java 进程,一个用于每个网络应用程序。我正在使用具有大量支持类和 jar 文件的 Web 框架 (Play),并且 Java 进程使用大量内存。一个 Play 进程显示大约 225MB 的“常驻私有(private)”内存。 (我正在使用 Java 1.7.0_05 在 Mac OS X 上对此进行测试。)特定于应用程序的代码可能只有几 MB。我知道典型的 Java Web 应用程序是添加到一个服务器进程(Tomcat 等)的 jars,但运行 Play 的标准方式似乎是作为一个独立的应用程序/进程。如果这些是 C 程序,那么这 200MB 中的大部分将是共享库,而不是在每个应用程序中重复。有没有办法在 Java 中实现这一点?我看到一些关于 class data sharing 的页面,但这似乎仅适用于核心运行时类。

最佳答案

目前,对于 Oracle VM,这是不可能的。

但我同意,这将是一个不错的功能,特别是因为 Java 拥有自动执行此操作所需的所有信息。

最重要的是,我认为 JIT 是这行不通的唯一原因:JIT 将运行时行为考虑在内。因此,如果应用程序 A 使用与应用程序 B 不同模式的代码,则会导致在运行时生成不同的汇编代码。

但是,通常的“模式”是“此代码的使用频率”。因此,如果应用程序 A 经常调用某些方法而 B 没有,他们仍然可以共享代码,因为 A 已经为优化/编译它付出了代价。

您可以尝试将多个应用程序作为 WAR 文件部署到单个 VM 中。但根据我的经验,这通常会导致无法正确清理线程局部变量或关闭 Hook 的代码出现问题。

关于java - 多个 JVM 进程是否可以共享公共(public)类的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13496307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com