The limit does not resides in jvm memory but in OS per user thread (process) limit.
In linux or Mac OS you can check by ulimit -u.
here you can find more info
Maximum number of threads per process in Linux?
When you create ThreadPoolExecutor with Executors.newFixedThreadPool( nb ) no Thread is create and only a small amount of memory is require for each thread (perhaps zero if the implementation use a LinkedList or a map to keep the Worker (Thread))
other useful info here
Maximum number of threads in a JVM?
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…