Maximum number of threads in a JVM?
What are the maximum number of threads which can be maintained by the Java virtual machine?
I did not explain this in my original question, but I am trying to benchmark the JVM and would like to try and see how many threads it can concurrently maintain.
Creating threads in a loop until an exception is thrown is an option, however, I would like to know if there is a better way to do this.
Solution 1:
There will be some limits imposed by your operating system and hardware configuration.
To raise the number of concurrent threads you should lower the default stacksize java -Xss 64k
.
- A Oracle 32 bit JVM will default to 320kb stack size per thread.
- For a 32 bit JVM with 2gb of addressable memory this will give you a maximum of 6.5k threads.
- A Oracle 64 bit JVM will default to 1M stack size per thread.
- For each gigabyte of memory you would get 1024 threads using the defaults.
- For Linux only:
-
ulimit -a
will give you the configured limits, for user processes and memory - You will only get 32k unique PIDs in linux
cat /proc/sys/kernel/pid_max
- a maximum of 32k processes. - You will get only 255k threads
cat /proc/sys/kernel/threads-max
-
Solution 2:
Writing a loop that creates new threads until it blows up is the definitive way to find out. You might well see performance degrade terribly before it actually dies.
I don't know if there's any configuration parameter or other built-in limit in the JVM off the top of my head. I've never run into a limit in practice. Of course sooner or later you will run out of memory, maybe some other resource.
I suspect that there is not a limit on number of threads per se, but rather on resources associated with a thread. That is, you might see that you can have 10,000 threads if all of them are running just one small class with a few bytes of data each, but the number drops rapidly when they each have an array of 10 million strings.
Solution 3:
The limit, if there is one, will be imposed by the operating system, not the jvm