2016-11-17 8 views
1

Я пытаюсь понять, что означает это утверждение:Что означает «каждый поток JVM имеет свой собственный счетчик программ»?

Каждая виртуальная машина Java поток имеет свой собственный компьютер (программа счетчик) регистр. В любой момент, каждый поток виртуальной машины Java выполняет код одного метода, а именно текущий метод (§2.6) для этого потока .

https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.5.1

Я предполагаю, что JVM нить работает как любой другой поток - что каждый раз, когда этот поток планируется запустить (по сказать ядро ​​Linux), что это «программа счетчик» загружается из его task_struct data structure поэтому с точки зрения процессора есть только один программный счетчик - он просто обновляется ОС каждый раз, когда ОС переключает потоки.

Верно ли это? Я запутался, потому что эта целая страница, похоже, подчеркивает, что каждая JVM получает свой собственный компьютер/стек/кучу и т. Д., Но я думал, что это было задано для любого процесса - является ли JVM каким-то уникальным от других процессов?

+0

Ну, вы неверно указали выдержку в названии: «Каждая виртуальная машина Java ** ** имеет свой собственный компьютер». И тогда «потоки JVM ** работают как любой другой поток». –

+0

Вы правы - это различие было частью моего смятения. – Charlie

ответ

3

предположить, что виртуальная машина работает как любой другой поток

Виртуальная машина Java не является нарезка: Это процесс, который имеет много потоков.

... так что с точки зрения процессора есть только один счетчик команд

Счетчик программы является лишь одним из нескольких регистров, которые составляют контекста нити. Каждый процессор имеет один набор физических регистров (или два набора, если он имеет гиперпоточность, но давайте все упростим и проигнорируем гиперпоточность). Поэтому каждый процессор может запускать ровно один поток в любое заданное мгновенное время. Но ...

Операционная система может «переключать контексты»: она может сохранять все регистры для одного потока, работающего на данном CPU, а затем загружать регистры с сохраненными регистрами (включая счетчик программ) из некоторых другой поток.

В типичной настольной операционной системе планировщик операционной системы вызывается, возможно, 100 раз в секунду или более, чтобы решить, какие потоки должны выполняться в этот момент. Он будет отключать потоки, которые на самом деле выполнялись в этот момент, и переключать потоки, которые ожидали запуска.

Таким образом, ваш компьютер может иметь гораздо больше живых потоков, чем у него есть процессоры.

+1

Имеет смысл. Моя путаница была на самом деле над тем, что составляло контекст нити. Теперь я понимаю, что в статье говорится, что каждый поток JVM имеет на компьютере и стеке, но процесс JVM имеет общую кучу для всех потоков. – Charlie

Смежные вопросы