我试图理解这句话的含义:
每个Java虚拟机线程都有自己的pc(程序计数器)寄存器。在任何时候,每个Java虚拟机线程都在执行单个方法的代码,即该线程的当前方法(§2.6)。
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.5.1
我假设JVM线程像任何其他线程一样工作——每次调度线程运行(比如Linux内核)时,它的“程序计数器”都从它task_struct的数据结构中加载,所以从CPU的角度来看,只有一个程序计数器——它只是在操作系统每次切换线程时被操作系统更新。
对吗?我很困惑,因为整个页面似乎一直在强调每个JVM都有自己的PC/堆栈/堆等。但我认为这是任何进程都有的——JVM在某种程度上与其他进程不同吗?
假设JVM像任何其他线程一样工作
JVM不是一个线程:它是一个有许多线程的进程。
...因此,从CPU的角度来看,只有一个程序计数器
程序计数器只是构成线程上下文的几个寄存器之一。每个CPU都有一组物理寄存器(或者两组,如果它是超线程的,但让我们保持简单并忽略超线程。)因此,每个CPU可以在任何给定的瞬间只运行一个线程。但是...
操作系统可以“切换上下文”:它可以保存在给定CPU上运行的一个线程的所有寄存器,然后从其他线程加载保存的寄存器(包括程序计数器)。
在典型的桌面操作系统中,操作系统调度程序可能每秒调用100次或更多次,以决定此时应该运行哪些线程。它将切换出当时实际运行的线程,并切换到等待运行的线程。
这样,您的计算机可以拥有比CPU多得多的活动线程。
我在试着理解这句话的意思: 每个Java虚拟机线程都有自己的pc(程序计数器)寄存器。在任何一点上,每个Java虚拟机线程都在执行单个方法的代码,即该线程的当前方法(§2.6)。 https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.5.1 我假设JVM线程的工作方式与任何其他线程一样--每次调度线程运行时(比方
问题内容: 我正在编写一个多线程Java程序,其中每个线程可能都需要将其标准输出重定向到一个单独的文件。每个线程都有其自己的文件。是否可以在“每个线程”的基础上重定向System.out或在所有线程上全局更改System.out? 问题答案: 是否可以基于“每线程”重定向System.out 不,这是不可能的。 是静态的,并且在JVM最初启动时,每个JVM都会作为系统类加载器的一部分进行加载。尽管
我正在编写一个多线程Java程序,其中每个线程可能需要将其标准输出重定向到一个单独的文件。每个线程都有自己的文件。是否有可能在“每个线程”的基础上重定向System.out,还是所有线程对System.out全局更改?
本文向大家介绍程序计数器为什么是私有的?相关面试题,主要包含被问及程序计数器为什么是私有的?时的应答技巧和注意事项,需要的朋友参考一下 程序计数器主要有下面两个作用: 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。 在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。 需要注意
问题内容: 我读到每个应用程序都在自己的JVM中运行。为什么会这样呢?他们为什么不让一个JVM运行2个或更多应用程序? 我说的是通过公共静态void main(String [])方法启动的应用程序…) 问题答案: (我假设您正在谈论通过方法启动的应用程序…) 理论上,您可以在JVM中运行多个应用程序。实际上,它们可以以各种方式相互干扰。例如: JVM具有一组System.in/out/err,一
基于每个JVM的CPU核数创建线程与在多个JVM上运行的线程在CPU核数上创建线程数,条件是所有JVM运行在共享同一CPU的一个物理系统上有何不同?换句话说,一个并行运行8个线程的多线程Java程序vs在共享同一CPU的8个不同JVM上运行的同一多线程程序? 下面我给出了一些我发现的用线程实现并行处理的方法,但是我不能理解它们之间的本质区别? 方法一:线程周期性地查询数据库更改,并行地启动(长时间