什么是JVM调度算法?

我真的很好奇JVM如何与线程一起工作! 在我的互联网搜索中,我发现了一些关于RTSJ的资料,但我不知道这是否是我答案的正确方向。 我还在sun的论坛http://forums.sun.com/thread.jspa?forumID=513&threadID=472453中找到了这个主题,但这并不令人满意。

有人可以给我一些关于JVM调度算法的指示,材料,文章或建议吗?

我也在寻找有关调度程序中Java线程的默认配置的信息,例如“时间切片时每个线程需要多长时间”。 这个东西。

我将不胜感激任何帮助 !

谢谢 !

没有单一的Java虚拟机; JVM是一个规范,它有多种实现,包括OpenJDK版本和它的Sun版本等。 我不确定,但我猜想任何合理的JVM都会简单地使用操作系统提供的底层线程机制,这意味着UNIX上的POSIX线程(pthreads)(Mac OS X,Linux等)并且会暗示Windows上的WIN32线程。 通常,这些系统默认使用循环策略。

它没有。 JVM使用操作系统本机线程,因此操作系统执行调度,而不是JVM。

前段时间我从Java的角度写了一些关于线程调度的文章。 但是,在主流平台上,线程化行为本质上取决于底层的OS线程。

请特别关注我的页面,了解什么是Java线程优先级 ,这解释了Java的优先级如何映射到底层操作系统线程优先级,以及实际上如何使得不同优先级的线程在Linux vs Windows上运行。 讨论的一个主要区别是,在Linux下,线程优先级与分配给线程的CPU比例之间存在更多关系,而在Windows下,情况并非如此(参见图表)。

我没有评论权限所以写在这里… JVM为每个相应的请求调用pthreads(通常使用的线程机制,其他变体)。 但这里的调度完全由OS充当主机完成。 但它是一种首选方法,可以通过JVM调度这些线程。 例如,在Jikes RVM中,有一些选项可以覆盖这种OS决策方法。 例如,在它中,线程被称为RVMThread,可以使用org.jikesrvm.schedular包类来调度/操作它们。 供更多参考