我正在嘗試爲不可信的java代碼編寫一個沙箱。
我用java編寫了沙盒。沙箱需要:
Java內存使用沙箱
- 不可信代碼的限制內存使用情況。如果不受信任的代碼使用的內存超過了指定的限制,則沙箱應終止程序。
- 如果不受信任的代碼沒有超過指定的限制,沙箱還應該能夠確定使用的「最大內存峯值」。
順便說一句,當我在這裏說的內存,它意味着堆+非堆內存。
我發現你可以設置內存閾值,並在內存池的一個超過閾值時收到通知。但這不是我想要的,因爲我想爲Heap +非堆內存設置限制。
我現在唯一的解決方案是輪詢每個小毫秒,使用getHeapMemoryUsage()和getNonHeapMemoryUsage()從MemoryMXBean獲取堆+非堆內存,並檢查它是否超出限制。
但我知道這個解決方案絕對不是太好(也有缺陷)。還有其他更好的解決方案嗎?
好的,假設我設法使用JNA。我如何才能瞭解程序崩潰或沒有?而且,如果沒有崩潰,我如何獲得所用的最大內存? – Teddy
爲了回答您的問題,我在回答中添加了一些內容。我沒有經驗試圖讓Java對信號做出反應,所以我不能說這對你是否適合。 – mikeslattery