Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么是JVM线程调度算法?_Java_Multithreading_Concurrency_Jvm - Fatal编程技术网

Java 什么是JVM线程调度算法?

Java 什么是JVM线程调度算法?,java,multithreading,concurrency,jvm,Java,Multithreading,Concurrency,Jvm,我真的很好奇JVM是如何与线程一起工作的 在我的互联网搜索中,我找到了一些关于RTSJ的资料,但我不知道这是否是我答案的正确方向 有人能给我一些关于JVM调度算法的指导、材料、文章或建议吗 我还想了解有关调度程序中Java线程的默认配置的信息,比如在时间切片的情况下,每个线程需要多长时间 谢谢你的帮助,谢谢 没有。JVM使用操作系统本机线程,因此操作系统执行调度,而不是JVM。没有单个Java虚拟机;JVM是一种规范,它有多种实现,包括OpenJDK版本和Sun版本等。我不确定,但我猜任何合理的

我真的很好奇JVM是如何与线程一起工作的

在我的互联网搜索中,我找到了一些关于RTSJ的资料,但我不知道这是否是我答案的正确方向

有人能给我一些关于JVM调度算法的指导、材料、文章或建议吗

我还想了解有关调度程序中Java线程的默认配置的信息,比如在时间切片的情况下,每个线程需要多长时间


谢谢你的帮助,谢谢

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

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

不久前,我从Java的角度写了一些文章。然而,在主流平台上,线程行为本质上取决于底层操作系统线程


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

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

一些JVM管理自己的线程。早期的太阳做到了这一点。Will Hartung:没错,Hotspot JVM从1.2天起就开始使用本机线程。文章说,1.1 JVM在Solaris上使用了本机线程,我记得Linux JVM在仍被称为Blackdown时也使用了本机线程,但我很确定Hotspot(仅在1.3年才成为JVM的一部分)从未使用过绿色线程。“绿色线程”在具有多个硬件线程的机器上有点毫无意义。但是有一个方案(JRockit、IIRC使用过,不确定它是否仍然使用),其中它使用了许多本机线程,但它们没有直接链接到Java线程。可能是对32位系统的特别优化(还记得吗?),有Java虚拟机规范()或“JVM规范”。但是,当有人谈论“JVM”或“JVM”时,他们通常指的是规范的实现,而不是规范本身。@Sauer,是的,“JVM”一词意味着单个JVM,虽然这在讨论特定JVM(例如Sun HotSpot JVM)时是有意义的,如果不确定讨论的是哪个JVM,这就没有任何意义。我个人经常说“JVM将加载类…”或“JVM将确保…”之类的话,这肯定是指实现,虽然它与我所讨论的具体实现无关。另一方面,当我特别谈论规范时,应该注意“JVM规范指定了,那个…”之类的东西。