How the JVM Creates a Java Thread
Calling Thread.start() asks the JVM to create a new execution thread. Calling run() directly does not create a thread; it executes on the current caller.
The Java-level start method performs state checks and enters JVM native code. The JVM allocates internal thread structures, creates or requests an operating-system thread, assigns a native stack, initializes thread-local runtime state, and schedules a bootstrap routine. The new thread eventually invokes the Java run method.
Modern HotSpot normally maps Java platform threads one-to-one to native OS threads. The configured stack size affects how many threads fit in memory and how deeply each thread can recurse. Every thread also consumes native metadata and scheduler resources beyond its Java heap objects.
Thread creation can fail because of process limits, virtual-memory exhaustion, container limits, or excessive stack size. Diagnose OutOfMemoryError: unable to create native thread by checking live thread count, stack configuration, host limits, and blocked-thread accumulation.
Virtual threads use a different scheduling model and should be evaluated separately from traditional platform threads.