What is the JVM thread scheduling algorithm?

I am really curious about how the JVM works with threads!

In my searches on the internet, I found some material about RTSJ, but I don't know if it's the right directions for my answers.

Can someone give me directions, material, articles or suggestions about the JVM scheduling algorithm?

I am also looking for information about the default configuration of Java threads in the scheduler, like how long does it take for every thread in case of time-slicing.

I appreciate any help, thank you!


There is no single Java Virtual Machine; JVM is a specification, and there are multiple implementations of it, including the OpenJDK version and the Sun version of it, among others. I don't know for certain, but I would guess that any reasonable JVM would simply use the underlying threading mechanism provided by the OS, which would imply POSIX Threads (pthreads) on UNIX (Mac OS X, Linux, etc.) and would imply WIN32 threads on Windows. Typically, those systems use a round-robin strategy by default.


It doesn't. The JVM uses operating system native threads, so the OS does the scheduling, not the JVM.


A while ago I wrote some articles on thread scheduling from the point of view of Java. However, on mainstream platforms, threading behaviour essentially depends on underlying OS threading.

Have a look in particular at my page on what is Java thread priority, which explains how Java's priority levels map to underlying OS threading priorities, and how in practice this makes threads of different priorities behave on Linux vs Windows. A major difference discussed is that under Linux there's more of a relationship between thread priority and the proportion of CPU allocated to a thread, whereas under Windows this isn't directly the case (see the graphs).


I don't have commenting rights so writing is here... JVM invokes pthreads(generally used threading mechanism,other variants are there) for each corresponding request. But the scheduling here is done entirely by OS acting as host. But it is a preferred approach and it is possible to schedule these threads by JVM. For example in Jikes RVM there are options to override this approach of OS decision. For example, in it threads are referred as RVMThread and they can be scheduled/manipulated using org.jikesrvm.schedular package classes. For more reference