我有一个服务将分配给它的所有调用分配到内存中,因为我们不想丢失数据,同时我们需要这个服务因任何外部依赖而失败(比如像DB) 。然后,这些分阶段的呼叫将被定期接收并在后台处理。当Java中的集合超出容量时会发生什么?
如果出于任何原因,如果呼叫过多而且内存不足,我们需要警惕。
所以,简单地说,这个问题是:我需要捕获或监视什么异常来通知我,当列表的添加由于资源不足而失败时?它会导致虚拟机本身出现OOM,还是会出现集合级限制?
如果没有收集级别的限制,您会如何建议我监控该服务的使用情况?目前,我们有堆使用情况和内存使用情况指标。那些够了吗?另外,JVM被配置为在OOM错误时终止(这是因为VM管理器然后重新启动它正在管理的任何进程)。
在内存方面,你会得到一个OOME。如果你想限制元素进入一个集合,你必须自己实现。 – Cruncher
我们应该首先避免这种情况,而应该使用一些基于文件的缓存。 –
这似乎很容易测试。编写一个简单的应用程序,在无限循环中将项添加到集合中,并查看发生了什么。 – Eran