I have an application running 32-bit JVM on a 64-bit LINUX machine. I recently ran into the "Unable to create native thread" issue - I fixed it temporarily by killing the threads that were running for a much longer duration - however, each of these threads also ran a DB query using a connection from the c3p0 connection pool - I didn't explicitly kill those db connections. I recently ran into this problem once again.
I was wondering what is the maximum addressable memory for a 32-bit JVM. Is it 4GB? As in, if I allocate and use all of 1.5GB heap, would I be able to create threads until I use 2.5GB of stack space - beyond which the JVM would complain of not being able to create any native threads?