Nicolas
Nicolas

Reputation: 269

Memory usage of thread or process in Java

In my application i run some threads with untrusted code and so i have to prevent a memory overflow. I have a WatchDog wich analyses the time of the current thread (the threads were called in serial). But how i can determine the memory usage? I only know the memory usage of the whole VM with Runtime.totalMemory()? If there is a possibility to find out the usage of the thread, or the usage of the single process it would be great. With the memory usage of the process i could calculate the usage of the thread anyway.

Upvotes: 6

Views: 3671

Answers (3)

Stephen C
Stephen C

Reputation: 718698

A Java application cannot control the amount of memory or (or CPU) used by its threads, irrespective of whether the threads are running trusted or untrusted code. There are no APIs for doing this in current generation JVMs. And there are certainly no APIs for monitoring a thread's usage of memory. (It is not even clear that this is a meaningful concept ... )

The only way you can guarantee to control the resource usage of untrusted Java code is to run the code in a separate JVM, and use operating system level resource controls (such as ulimit, nice, sigstop, etc) and "-Xmx" to limit that JVM's resource usage.


Some time back, a Sun produced JSR 121 aimed at addressing this issue. This JSR would allow an application to be split into parts (called "isolates") that communicated via message passing, and offered the ability for one isolate to monitor and control another. Unfortunately, the Isolate APIs have yet to be implemented in any mainstream JVM.

Upvotes: 1

Hot Licks
Hot Licks

Reputation: 47699

What you need to do is to run the untrusted code in its own process/JVM. This is possible using the JNI interfaces (if your operating system permits it).

Upvotes: 0

Konrad Reiche
Konrad Reiche

Reputation: 29483

Since a JVM executing a Java program is a Java process you don't have to worry about that. All threads share the same memory space in the JVM process.

Hence it is sufficient to rely on

Upvotes: 2

Related Questions