Введение
Jupiter JVM — это виртуальная машина Java с открытым исходным кодом, разработанная в качестве магистерской диссертации с акцентом на модульность и расширяемость. Она использует сборщик мусора Boehm и GNU Classpath. Основные аспекты её архитектуры можно упрощённо представить следующим образом:
Memory locality Objects are allocated on the heap with little or no consideration for locality. While this approach may be appropriate for uniprocessors or small scale SMPs, it is unlikely to work well on a cluster of workstations where remote memory access is one or two orders of magnitude slower than local memory access. Parallel garbage collection Garbage collection can consume a considerable amount of application time. Typically, JVMs employ "stop the world" garbage collectors, where program threads are halted during garbage collection. This approach will not work for large numbers of processors, for two reasons. First, the cost of "stopping the world" is considerably higher when the number of processors is large. Second, using a single thread to collect garbage results in an unacceptably large sequential fraction for any application. Memory consistency model To achieve scaling performance on many processors, it is important to exploit the "relaxed" Java Memory Model. Presently no JVM implements the JMM faithfully, and indeed many implement it incorrectly, leading to lack of coherence and loss of optimization opportunities. The specification of the JMM was also revised in 2007. Efficient threads and synchronization With many processors, it is critical to provide efficient threading support and synchronization mechanisms that scale well.
Локальность памяти. Объекты выделяются в куче без существенного учёта локальности. Хотя такой подход может быть уместен для однопроцессорных систем или небольших SMP, он вряд ли будет эффективен в кластере рабочих станций, где удалённый доступ к памяти на один-два порядка медленнее, чем доступ к локальной памяти.
Memory locality Objects are allocated on the heap with little or no consideration for locality. While this approach may be appropriate for uniprocessors or small scale SMPs, it is unlikely to work well on a cluster of workstations where remote memory access is one or two orders of magnitude slower than local memory access. Parallel garbage collection Garbage collection can consume a considerable amount of application time. Typically, JVMs employ "stop the world" garbage collectors, where program threads are halted during garbage collection. This approach will not work for large numbers of processors, for two reasons. First, the cost of "stopping the world" is considerably higher when the number of processors is large. Second, using a single thread to collect garbage results in an unacceptably large sequential fraction for any application. Memory consistency model To achieve scaling performance on many processors, it is important to exploit the "relaxed" Java Memory Model. Presently no JVM implements the JMM faithfully, and indeed many implement it incorrectly, leading to lack of coherence and loss of optimization opportunities. The specification of the JMM was also revised in 2007. Efficient threads and synchronization With many processors, it is critical to provide efficient threading support and synchronization mechanisms that scale well.
Параллельный сбор мусора. Сбор мусора может занимать значительную часть времени выполнения приложения. Обычно JVM используют сборщики мусора типа "stop-the-world", при которых потоки программы приостанавливаются во время сборки мусора. Этот подход не подходит для большого количества процессоров по двум причинам. Во-первых, стоимость приостановки всех потоков существенно возрастает с увеличением числа процессоров. Во-вторых, использование одного потока для сборки мусора приводит к неприемлемо высокой последовательной составляющей для любого приложения.
Memory locality Objects are allocated on the heap with little or no consideration for locality. While this approach may be appropriate for uniprocessors or small scale SMPs, it is unlikely to work well on a cluster of workstations where remote memory access is one or two orders of magnitude slower than local memory access. Parallel garbage collection Garbage collection can consume a considerable amount of application time. Typically, JVMs employ "stop the world" garbage collectors, where program threads are halted during garbage collection. This approach will not work for large numbers of processors, for two reasons. First, the cost of "stopping the world" is considerably higher when the number of processors is large. Second, using a single thread to collect garbage results in an unacceptably large sequential fraction for any application. Memory consistency model To achieve scaling performance on many processors, it is important to exploit the "relaxed" Java Memory Model. Presently no JVM implements the JMM faithfully, and indeed many implement it incorrectly, leading to lack of coherence and loss of optimization opportunities. The specification of the JMM was also revised in 2007. Efficient threads and synchronization With many processors, it is critical to provide efficient threading support and synchronization mechanisms that scale well.
Модель согласованности памяти. Для достижения масштабируемости на многопроцессорных системах важно использовать "слабую" (relaxed) модель памяти Java. В настоящее время ни одна JVM не реализует JMM в точном соответствии со спецификацией, и многие делают это некорректно, что приводит к несогласованности данных и потере возможностей оптимизации. Спецификация JMM также была пересмотрена в 2007 году.
Memory locality Objects are allocated on the heap with little or no consideration for locality. While this approach may be appropriate for uniprocessors or small scale SMPs, it is unlikely to work well on a cluster of workstations where remote memory access is one or two orders of magnitude slower than local memory access. Parallel garbage collection Garbage collection can consume a considerable amount of application time. Typically, JVMs employ "stop the world" garbage collectors, where program threads are halted during garbage collection. This approach will not work for large numbers of processors, for two reasons. First, the cost of "stopping the world" is considerably higher when the number of processors is large. Second, using a single thread to collect garbage results in an unacceptably large sequential fraction for any application. Memory consistency model To achieve scaling performance on many processors, it is important to exploit the "relaxed" Java Memory Model. Presently no JVM implements the JMM faithfully, and indeed many implement it incorrectly, leading to lack of coherence and loss of optimization opportunities. The specification of the JMM was also revised in 2007. Efficient threads and synchronization With many processors, it is critical to provide efficient threading support and synchronization mechanisms that scale well.
Эффективные потоки и синхронизация. При большом количестве процессоров критически важно обеспечить эффективную поддержку многопоточности и механизмы синхронизации, которые хорошо масштабируются.
Memory locality Objects are allocated on the heap with little or no consideration for locality. While this approach may be appropriate for uniprocessors or small scale SMPs, it is unlikely to work well on a cluster of workstations where remote memory access is one or two orders of magnitude slower than local memory access. Parallel garbage collection Garbage collection can consume a considerable amount of application time. Typically, JVMs employ "stop the world" garbage collectors, where program threads are halted during garbage collection. This approach will not work for large numbers of processors, for two reasons. First, the cost of "stopping the world" is considerably higher when the number of processors is large. Second, using a single thread to collect garbage results in an unacceptably large sequential fraction for any application. Memory consistency model To achieve scaling performance on many processors, it is important to exploit the "relaxed" Java Memory Model. Presently no JVM implements the JMM faithfully, and indeed many implement it incorrectly, leading to lack of coherence and loss of optimization opportunities. The specification of the JMM was also revised in 2007. Efficient threads and synchronization With many processors, it is critical to provide efficient threading support and synchronization mechanisms that scale well.