在我的应用程序中,我使用不受信任的代码运行一些线程,因此我必须防止内存溢出。我有一个WatchDog,它分析当前线程的时间(线程是串行调用的)。
但我如何确定内存使用情况?
我只知道Runtime.totalMemory()
整个虚拟机的内存使用情况?
如果有可能找出线程的使用,或单个进程的使用,那将是很好的。通过进程的内存使用,我可以计算线程的使用情况。
答案 0 :(得分:2)
由于执行Java程序的JVM是Java进程,因此您不必担心这一点。所有线程在JVM进程中共享相同的内存空间。
因此,依靠
就足够了答案 1 :(得分:1)
Java应用程序无法控制其线程使用的内存量或(或CPU), 无论线程是运行受信任还是不受信任的代码。没有API可以做 这在当前一代JVM中。当然没有用于监视线程内存使用情况的API。 (甚至不清楚这是一个有意义的概念......)
您可以保证控制不受信任的Java代码的资源使用的唯一方法是在单独的JVM中运行代码,并使用操作系统级资源控制(例如ulimit,nice,sigstop等)和“-Xmx” “限制JVM的资源使用。
一段时间后,太阳报JSR 121制作了{{3}},旨在解决这个问题。这个JSR允许将应用程序拆分为通过消息传递进行通信的部分(称为“隔离”),并为一个隔离提供监视和控制另一个隔离的能力。不幸的是,Isolate API尚未在任何主流JVM中实现。
答案 2 :(得分:0)
您需要做的是在自己的进程/ JVM中运行不受信任的代码。这可以使用JNI接口(如果您的操作系统允许)。