Введение

Jupiter JVM — это виртуальная машина Java с открытым исходным кодом, разработанная в качестве магистерской диссертации с акцентом на модульность и расширяемость. Она использует сборщик мусора Boehm и GNU Classpath. Основные аспекты её архитектуры можно упрощённо представить следующим образом:

Локальность памяти. Объекты выделяются в куче без существенного учёта локальности. Хотя такой подход может быть уместен для однопроцессорных систем или небольших SMP, он вряд ли будет эффективен в кластере рабочих станций, где удалённый доступ к памяти на один-два порядка медленнее, чем доступ к локальной памяти.

Параллельный сбор мусора. Сбор мусора может занимать значительную часть времени выполнения приложения. Обычно JVM используют сборщики мусора типа "stop-the-world", при которых потоки программы приостанавливаются во время сборки мусора. Этот подход не подходит для большого количества процессоров по двум причинам. Во-первых, стоимость приостановки всех потоков существенно возрастает с увеличением числа процессоров. Во-вторых, использование одного потока для сборки мусора приводит к неприемлемо высокой последовательной составляющей для любого приложения.

Модель согласованности памяти. Для достижения масштабируемости на многопроцессорных системах важно использовать "слабую" (relaxed) модель памяти Java. В настоящее время ни одна JVM не реализует JMM в точном соответствии со спецификацией, и многие делают это некорректно, что приводит к несогласованности данных и потере возможностей оптимизации. Спецификация JMM также была пересмотрена в 2007 году.

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