我有一个进程,它使用库来执行耗费时间和内存的步骤,有时会占用太多内存,并在大型请求时抛出分配失败。在这种情况下,接受失败并继续处理是合理的,所以我的解决方案是将对该工具的引用设为空,并创建一个新的引用,以便继续处理后续输入。
我的团队中的其他人反对这种策略,他们说,一旦JVM中的内存变得如此紧张,以至于分配失败,JVM就处于可疑状态:没有真正的证据,只有FUD。另一方面,我只能归纳地说l还没有看到负面影响(我还没有看到任何黑天鹅)。
问:继续使用抛出内存分配失败的JVM是绝对不安全的吗?
发布于 2011-05-27 21:55:31
不,这不是绝对不安全的。不过,如果可以避免这种情况显然要好得多,因为在你开始分配内存失败后,谁知道你的数据结构会处于什么样的不确定状态。
有许多应用程序(特别是webapps)可以很好地经受住内存分配故障。然而,它是否安全在很大程度上取决于应用程序。不断更新共享资源的代码将比webapps更糟糕,再举一个例子,webapps在不同任务之间有很大程度的分离,通常共享资源的方式很少。
最重要的是,你要仔细评估你的应用程序,并且对你可能遇到的陷阱有一个很好的想法。然后,尝试在出现故障后尽快重新启动JVM。;)
发布于 2011-05-27 21:54:30
当内存耗尽时,其他线程也会耗尽内存,它们可能无法很好地处理这一问题。您可能会发现大部分时间都可以继续,但最好不要在一开始就耗尽内存。
https://stackoverflow.com/questions/6153106
复制相似问题