我正在开发一个可以在同一台计算机上同时实例化多次的应用程序。每个 JVM 都不必要地将应用程序类加载到它们自己的内存中,因为所有应用程序的类都是相同的。
我在此处和此处阅读了有关 CDS的信息,但它似乎仅对 JDK 类有效。
如何在 JVM 之间共享我的应用程序类的数据?
我不是特别了解这个主题,但我做了一些研究。我认为我们可以相当肯定地说,在大多数 JVM 中这实际上是不可能的。下面的问题与您的问题相似,它的答案和评论可能会有所帮助。
一种可能的选择是您可以将想要共享的类放在一个进程中,并使用 JMX(Java 管理扩展)之类的东西公开它们的功能。这样多次加载的其他进程就不必加载所有类。但是,这可以减少多少总资源足迹当然是有问题的,并且取决于具体情况。
虽然理论上听起来不错,但这并不实际。Java 类的存储映像由一定数量的常量数据组成,但也可能包含同样多的“可变”数据——指向其他类的链接指针、各种运行时表、JITCed 代码等。弄清楚什么是可共享的,什么是' t 充其量是困难的,并导致设计不能产生最佳性能。