信頼できないJavaコードのサンドボックスを作成しようとしています。
私はJavaを使用してサンドボックスを作成しました。サンドボックスは次の目的で必要です。
- 信頼できないコードのメモリ使用量を制限します。信頼できないコードが指定された制限を超えるメモリを使用する場合、サンドボックスはプログラムを終了する必要があります。
- 信頼できないコードが指定された制限を超えない場合、サンドボックスは使用される「最大メモリピーク」も判別できる必要があります。
ところで、ここでメモリと言ったとき、それはヒープ+非ヒープメモリを意味します。
メモリしきい値を設定し、メモリプールの1つがしきい値を超えた場合に通知を受けることができることがわかりました。しかし、ヒープ+非ヒープメモリの制限を設定したいので、これは私が望んでいたことではありません。
私が現在持っている唯一の解決策は、小さなミリ秒ごとにポーリングし、 MemoryMXBeanからgetHeapMemoryUsage()とgetNonHeapMemoryUsage()を使用してヒープと非ヒープメモリを取得し、制限を超えているかどうかを確認することです。
しかし、私はこの解決策も間違いなく良くないことを知っています(そして欠陥があります)。他にもっと良い解決策はありますか?