我真的很好奇JVM如何使用线程! 在我的互联网搜索中,我找到了一些关于RTSJ的资料,但我不知道这是否是我答案的正确方向。 我也在sun的论坛中发现了这个话题, http://forums.sun.com/thread.jspa?forumID=513&threadID=472453, 但这并不令人满意。
有人可以给我一些关于JVM调度算法的指示,材料,文章或建议吗?
我也在寻找有关调度程序中Java线程的默认配置的信息,例如“时间切片时每个线程需要多长时间”。这个东西。
我将不胜感激任何帮助!
谢谢!
答案 0 :(得分:18)
没有单一的Java虚拟机; JVM是一个规范,它有多种实现,包括OpenJDK版本和Sun版本等。我不确定,但我猜想任何合理的JVM都会简单地使用操作系统提供的底层线程机制,这意味着UNIX上的POSIX线程(pthreads)(Mac OS X,Linux等)并且会暗示Windows上的WIN32线程。通常,这些系统默认使用循环策略。
答案 1 :(得分:4)
没有。 JVM使用操作系统本机线程,因此操作系统执行调度,而不是JVM。
答案 2 :(得分:2)
前一段时间我从Java的角度在thread scheduling上写了一些文章。但是,在主流平台上,线程化行为本质上取决于底层操作系统线程。
特别关注我的页面Java thread priority,它解释了Java的优先级如何映射到底层操作系统线程优先级,以及实际上这使得不同优先级的线程在Linux vs Windows上运行。讨论的一个主要区别是,在Linux下,线程优先级与分配给线程的CPU比例之间存在更多关系,而在Windows下,情况并非如此(参见图表)。
答案 3 :(得分:0)
我没有评论权,所以写在这里...... JVM为每个相应的请求调用pthread(通常使用的线程机制,其他变体)。但这里的调度完全由OS充当主机完成。 但它是一种首选方法,可以通过JVM调度这些线程。例如,在Jikes RVM中,有一些选项可以覆盖这种OS决策方法。例如,在其中线程称为RVMThread,可以使用org.jikesrvm.schedular包类来调度/操作它们。 更多reference