Java 在同一台机器上运行的不同JVM之间共享hashmap

Java 在同一台机器上运行的不同JVM之间共享hashmap,java,map,jvm,data-sharing,Java,Map,Jvm,Data Sharing,我有一些包含数据库缓存数据的映射。目前,同一服务器的5个实例正在不同JVM的同一台机器上运行。如何在JVM之间共享映射?缓存是一次写入,多次读取。目前的问题是因为这个缓存JVM占用空间很大。因此,在所有JVM中存储此映射会消耗大量内存。我需要一些解决方案,可能不会消耗太多的cpu时间。有没有办法做到这一点,就像在JVM之间进行类共享一样 谢谢 Nikesh PL基本上,你不能:这是两个不同的地址空间 您可以序列化其中一个并从另一个读取它,但这与共享它们不同 一个管理缓存的过程,一个应用程序可以用

我有一些包含数据库缓存数据的映射。目前,同一服务器的5个实例正在不同JVM的同一台机器上运行。如何在JVM之间共享映射?缓存是一次写入,多次读取。目前的问题是因为这个缓存JVM占用空间很大。因此,在所有JVM中存储此映射会消耗大量内存。我需要一些解决方案,可能不会消耗太多的cpu时间。有没有办法做到这一点,就像在JVM之间进行类共享一样

谢谢
Nikesh PL

基本上,你不能:这是两个不同的地址空间

您可以序列化其中一个并从另一个读取它,但这与共享它们不同


一个管理缓存的过程,一个应用程序可以用来访问数据的快速、低带宽的接口,怎么样?

为什么不看看oracle的项目呢。它不是免费的,但是你可以在开发系统上免费下载和测试它。它正是你想要的。它用作存储数据库数据的缓存,但最终是键和值的映射。它的设置和使用非常简单。这里有一个链接可以帮助您开始:


您的最佳选择可能是使用一种关键值缓存解决方案。就像Memcache或者Terracotta做的那样。与内存中的hashmap不完全相同,但内存效率更高。map的查找频率非常高,几乎为5000万次/小时/内核。所以每次我需要从不同的进程访问。它会影响性能,对吗?对于这种工作负载,即14K次点击率/秒,并且假设写操作的比例相对较高,您可能根本不应该考虑Java。考虑编写一个C/C++中的共享内存模块,可以通过JNI访问。使用内存中的数据库可能可以获得这种性能,但每秒28K上下文切换也可能会带来麻烦。