我的 java 应用程序需要运行用户的 javascript 代码。我需要保护应用程序免受脚本不当行为(可能是无意的)的影响。我实现了 API 调用限制,并针对可能的无限循环添加了时间限制。但是,我没有找到针对 OutOfMemory 错误的保护措施,这可能是由于在脚本中分配过多的对象、数组元素等引起的。
目前我只有两个想法:
如果 OOM 失败,则在 shell 脚本中调用应用程序并以某种方式恢复其状态;
拦截 Context#observeInstructionCount 并经常检查分配的内存量是否增长太危险。
这两种变体都非常模糊和愚蠢,所以我想要更聪明的东西。