java - 减少 Solaris (UNIX) 上多个 Java 进程的内存占用

标签 java memory process fork shared-memory

有没有办法让 Java 进程 fork 或启动另一个 Java 进程并使用共享内存以最大限度地减少 RAM 使用量?

为了能够安全地杀死一个进程而不影响其他进程,将会有很多进程。此外,如果线程位于单独的进程中,这还可以轻松检测哪些线程正在使用更多内存或 CPU。这应该允许任何进程发生崩溃或 OutOfMemoryError 而不影响其他进程。

如果我们可以同时运行 100-300 个 java 进程,每个进程都有自己的用途,那就太好了。我意识到,如果我们要避免从数据库和文件系统中掠夺太多内存,我们可能必须限制该数量并要求进程承担多个角色。

编辑:
我认为当我说共享内存时我表达了错误的含义。我的意思是可以在多个进程之间使用的内存,例如 Java 类(而不是变量)。如果可能的话,所有的java包和库都可以重用。

最佳答案

@George Baily - 刚刚看到你上面的评论。

是的,较新的 JVM 确实共享类文本,但据我了解,它仅在客户端(非服务器)JVM 中。这样做的好处是减少了 IO 和启动时间,而且还有助于减少占用空间。

您可以在这里阅读更多内容:

http://download.oracle.com/javase/1.5.0/docs/guide/vm/class-data-sharing.html

您可能还希望积极调整堆大小参数,以减少占用空间。虽然是半商业化的,但我维护了一个小型软件包,可以管理多个(数百个)JVM 的工作负载,并动态管理操作系统级 IO 和进程优先级,以满足工作负载目标。适用于 JVM 的穷人的 WLM。到目前为止,我未能成功地在运行时管理 JVM 人体工程学,但 WLM 方法的效果却出奇的好。如果您需要更多信息,请告诉我。

关于java - 减少 Solaris (UNIX) 上多个 Java 进程的内存占用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4963025/

相关文章:

我们可以在创建进程后立即以编程方式将进程附加到 VS 吗?

java - 使用 Java fork 和删除特权

java - 强制子类使用父类(super class)的@Override 方法。父类(super class)中的方法必须有主体

java - 计算从 Azure 查询返回的字符串数量

java - Java 中图像的无文件资源包?

c - 关于内存管理中函数arch_get_unmapped_area的一个问题(linux)

linux - Oracle 在没有任何进程的情况下使用内存

c++ - 重新分配(): invalid old size even when malloc() is used to allocate memory

c# - 从流开始进程

java - 是否需要我的 try catch block ?