我在项目中使用了如下代码,将一些数据放到了缓存中,当有地方需要调用getBAsset方法获取数据的时候,发现assetBuffer 中数据为空,这是什么原因呢? 当出现该问题的时候,我登录到项目部署的服务器上,查看服务器内存,发现可用内存只有100多M了,buffer内存占了3个G,服务器总内存为8个G,然后我把项目停了之后,将buffer内存清除之后,重新启动项目之后,再次调用getBAsset方法,assetBuffer是有数据的。(放入到缓存中的数据大概有16w左右)项目是用tomcat启动的,启动参数是这样配置的,给tomcat分了3G左右 ##  想请问大佬们,为什么会出现getBAsset方法拿不到数据呢?是因为系统内存不足了,java内存中的数据被清空了?目前还暂不考虑加redis组件,感觉加了redis组件会解决此问题 /** * 缓存 */ @Component @Order(1) @Slf4j public class ScenarioBuffer implements IActionListener, ApplicationRunner { /** * 资产缓存 * 系统启动时初始化,当资产增删改时,同步更新它; */ private static Map> assetBuffer = Collections.synchronizedMap(new HashMap>()); private static ScenarioBuffer instance = new ScenarioBuffer(); public static ScenarioBuffer getInstance() { return instance; } /** * 从缓存中获取资产 * * @param groupId * @return */ public static List getBAsset(String groupId) { if (assetBuffer.containsKey(groupId)) { return assetBuffer.get(groupId); } return null; } @Override public void run(ApplicationArguments args) throws Exception { IAssetService assetService = SpringUtil.getBean(IAssetService.class); List assetList = assetService.list(); assetBuffer.put("key",assetList); } }