我正在尝试为不受信任的 java 代码编写沙箱。
我使用java编写了沙箱。沙盒需要:
- 限制不受信任代码的内存使用。如果不受信任的代码使用的内存超过指定的限制,沙箱应该终止程序。
- 如果不受信任的代码没有超过指定的限制,沙箱也应该能够确定使用的“最大内存峰值”。
顺便说一句,当我在这里说内存时,它的意思是堆+非堆内存。
我发现您可以设置内存阈值并在内存池之一超过阈值时收到通知。但这不是我想要的,因为我想设置 Heap + Non-Heap 内存的限制。
我目前唯一的解决方案是每小毫秒轮询一次,使用来自 MemoryMXBean 的 getHeapMemoryUsage() 和 getNonHeapMemoryUsage() 获取堆+非堆内存,并检查它是否超过了限制。
但我知道这个解决方案也绝对不好(并且有缺陷)。还有其他更好的解决方案吗?