Что делает jvm для использования ресурсов многоядерного процессора?

Обычно Java-программа выполняется с одним процессом под названием "javaw». И когда я запускаю один процесс, я могу получить только максимальный ресурс одного ядра (многоядерных). Но когда я запускаю многопоточную программу в jvm, количество используемых ей ядер соответствует количеству потоков, которое может сделать не один процесс. Так может кто-нибудь дать мне некоторую информацию о том, как jvm справляется с многопоточными программами на многоядерном процессоре?

/**
* I run this program in my machine which has 8 core cpu
* and the jre is 1.6.0_24
* How does jvm use one process to use all the cpu resources?        
*/

public class MultiCoreUseTest implements Runnable{
@Override
public void run() {

    int i;
    while(true)
         i =1;
}

public static void main(String[] args) {

    //create 8 threads
            //8 threads the usage of cpu is 100%
            // if 4 threads the usage of cpu is 50%
    for(int i = 0; i
 christophe08 окт. 2012 г., 09:10
@pap спасибо!
 asgs08 окт. 2012 г., 08:40
Вы понимаете, что процесс может создать один или несколько потоков, верно?
 pap08 окт. 2012 г., 09:05
@newand Да, вы не правы. Java-поток настраивается и выполняется JVM как собственный поток ОС (или дочерний процесс, если используется * nix).
 Peter Lawrey08 окт. 2012 г., 10:09
Мораль этой истории; когда дело доходит до производительности, вам следует беспокоиться только о тех проблемах, которые, по вашему мнению, являются проблемой. ИМХО, Около половины вопросов о производительности на SO относятся к вещам, которые не были настоящей проблемой в первую очередь.
 christophe08 окт. 2012 г., 08:41
да, процесс может иметь многопоточность. Но в моем понимании jvm - это отдельный процесс, который управляет потоками Java-программы, и Java-поток не эквивалентен потоку в ядре, и я думаю, что это разницаp_thead» в сНить' в Яве. И могу я ошибаться.

Ответы на вопрос(1)

Решение Вопроса

Потоки одного процесса могут быть распределены по разным процессорам и ядрам процессоров так же, как и отдельные процессы. Тот факт, что приложение имеет один процесс, не означает, что многие его потоки связаны с одним процессором / ядром.

 christophe08 окт. 2012 г., 08:55
Спасибо за ваш ответ!
 christophe08 окт. 2012 г., 08:51
Таким образом, метод OS имеет дело с theads, которые создаются Java-программой, то же самое, что и C?
 cdhowie08 окт. 2012 г., 08:53
Существует довольно много C-библиотек, которые реализуют потоки. Насколько я понимаю, некоторые из них могут использовать преимущества нескольких процессоров / ядер, а некоторые нет. На большинстве (если не на всех) настольных платформах Java может использовать преимущества нескольких процессоров / ядер благодаря реализации потоков.

Ваш ответ на вопрос