Не так давно компания Sun Microsystems запустила проект openJDK—новую версию имплементации JDK, лицензированную под GPL v2 и основанную на недавно выпущенной JDK 6-й версии. Изначально были опубликованы только 2 компоненты—Hotspot и javac, но работа над интеграцией остальных идет полным ходом.
И первые плоды "freedom as in free speech" не заставили себя долго ждать—практически сразу исходный код стал доступен не только для скачивания. Появилась возможность совершенно свободно побраузить "индексированный" исходный код через веб интерфейс предоставляемый с помощью OpenGrok (как и в случае с OpenSolaris).
Встречайте: http://opengrok.neojava.org/hotspot
Какие бонусы это несет простым смертным? Одной из очень полезных особенностей OpenGrok является возможность осуществлять поиск по исходникам—полнотекстовый, типизированный (например, по идентификаторам) или по истории изменений. Так, например, теперь можно без особых ухищрений посмотреть текущий список параметров Hotspot или просто поискать интересующий параметр. А если Вам не чужд C/C++, не составит большого труда понять на что конкретный параметр влияет.
Объявление параметра выглядит следующим образом:
product(bool, JavaMonitorsInStackTrace, true, "Print info about Java monitor locks when the stacks are dumped")
где:
product—тип параметраbool—тип значения параметраJavaMonitorsInStackTrace—имя параметраtrue—значение по умолчанию"Print info about Java monitor locks when the stacks are dumped"—краткое описание
Различаются следующие типы параметров:
manageable—документированный параметр, доступный для изменения черезcom.sun.management.HotSpotDiagnosticMXBeanинтерфейсproduct_rw—то же что и manageable, но используется для недокументированных параметровproduct—параметр присутствует и доступен для изменения во всех версиях Hotspotdiagnostic—для использования в product-версии нужно предварительно указать параметр-XX:+UnlockDiagnosticVMOptionsdevelop—доступен только в debug-билде, в product-версии имеет фиксированное значениеnotproduct—то же что иdevelop, но из product-билда полностью исключен*_pd—параметры, дефолтные значения которых будут объявлены отдельно
Значение по умолчанию ранее объявленного параметра может быть определено, например, так:
define_pd_global(bool, ImplicitNullChecks, true)
Допустимыми типами значений параметра являются следующие:
bool—бинарное значениеintx—целое числоuintx—целое неотрицательное числоcstr == const char*—строка
Ко всем объявленным параметрам можно получить доступ из командной строки (-XX:[+/-]имя_параметра - для бинарного параметра и -XX:имя_параметра=новое_значение_параметра). Например, '-XX:-BackgroundCompilation' или '-XX:PermSize=16m'.
В коде же Hotspot их значения используются напрямую. Например, так:
if (BackgroundCompilation) {
...
} else {
...
}
Соответственно, простой поиск в исходном коде по названию параметра выдаст все места, где он используется.
Осталось только узнать где искать объявления параметров. Так как Hotspot разрабатывается для целого ряда платформ, в нем
существует как кроссплатформенный (находится в 'src/share/**'),
так и платформозависимый код('src/cpu/**', 'src/os/**' и
'src/os_cpu/**'). Соответственно, объявления параметров распределены в
зависимости от того на какой код они влияют:
| Относительный путь к файлу | Описание |
| src/share/vm/runtime/globals.hpp src/share/vm/runtime/globals_core.hpp |
общие параметры |
| src/share/vm/c1/c1_globals.hpp src/share/vm/opto/c2_globals.hpp |
параметры, специфичные для одного из JIT-компиляторов |
| src/os/linux/vm/globals_linux.hpp src/os/linux/vm/c1_globals_linux.hpp src/os/linux/vm/c2_globals_linux.hpp src/os/solaris/vm/globals_solaris.hpp src/os/solaris/vm/c1_globals_solaris.hpp src/os/solaris/vm/c2_globals_solaris.hpp src/os/win32/vm/globals_win32.hpp src/os/win32/vm/c1_globals_win32.hpp src/os/win32/vm/c2_globals_win32.hpp |
параметры, специфичные для некоторой ОС |
| src/cpu/amd64/vm/globals_amd64.hpp src/cpu/amd64/vm/c2_globals_amd64.hpp src/cpu/i486/vm/globals_i486.hpp src/cpu/i486/vm/c1_globals_i486.hpp src/cpu/i486/vm/c2_globals_i486.hpp src/cpu/sparc/vm/globals_sparc.hpp src/cpu/sparc/vm/c1_globals_sparc.hpp src/cpu/sparc/vm/c2_globals_sparc.hpp |
параметры, специфичные для некоторой архитектуры |
| src/os_cpu/linux_i486/vm/globals_linux_i486.hpp src/os_cpu/linux_amd64/vm/globals_linux_amd64.hpp src/os_cpu/solaris_i486/vm/globals_solaris_i486.hpp src/os_cpu/solaris_amd64/vm/globals_solaris_amd64.hpp src/os_cpu/solaris_sparc/vm/globals_solaris_sparc.hpp src/os_cpu/win32_i486/vm/globals_win32_i486.hpp src/os_cpu/win32_amd64/vm/globals_win32_amd64.hpp |
параметры, специфичные для конкретной платформы |
Владимир Иванов
опубликовал vmrobot ( янв 31 2007, 11:25:34 AM MSK ) Permalink Комментарии [2]

опубликовал Elijah Epifanov Январь 31, 2007 at 02:28 PM MSK #
опубликовал Vladimir Ivanov Февраль 12, 2007 at 09:18 PM MSK #