Недавно я просматривал содержание оптимизации синхронизированной блокировки, и некоторые места кажутся неудобными, так что просто скомпилируйте исходный код, чтобы посмотреть.
Компиляция на окнах
Поскольку моя обычно используемая компьютерная операционная система - win10, я хотел сначала скомпилировать на win10, но в Интернете слишком мало статей, а во-вторых, слишком сложно компилировать в Windows (Windows может ссылаться на глубокое понимание JVM виртуальная машина, эта книга), так что сдался.
MAC-среда
Подготовить
Получить исходный код
Исходный код OpenJDK управляется Mercurial. Если вы загружаете его через репозиторий, вам необходимо установить Mercurial. Для его установки мы используем менеджер пакетов homebrew.
brew install mercurial
Если на вашем компьютере не установлен доморощенный, вы можете использовать следующую команду для его установки
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
После завершения установки используйте следующую команду для клонирования исходного кода.
cd ~/jvm
hg clone https://hg.openjdk.java.net/jdk/jdk12
После выполнения команды исходный код openjdk не загружается
Поскольку я не использую метод hg, вы можете обратиться к статье The Flash для этой части.woo woo Краткое описание.com/afraid/oh oh 7 oh 91766…
Конечно, я настоятельно не рекомендую вам использовать метод Mercurial для загрузки, этот метод будет долго ждать, и он также требует внешней сети для обеспечения безопасности. Рекомендую скачать прямо со страницыПакет сжатия исходного кода OpenJdk12)
Например, я скачал файл в формате gz (неважно, какой формат вы выберете).
Если вы используете Chrome, вы можете включить многопоточную загрузку, и скорость будет значительно улучшена.
Bootstrap JDK
Поскольку некоторые компоненты OpenJDK написаны на C++, а некоторые — на Java, для компиляции этих кодов Java требуется доступный JDK, который официально называется «Bootstrap JDK». Вообще говоря, он должен быть больше, чем скомпилированный JDK. Доступ к первой версии, использующей здесь OpenJDK11, можно получить по этому URL-адресу.jdk.java.net/archive/скачать Не забудьте загрузить OpenJDK11 для платформы Mac.
Версия Bootstrap JDK, которую я использую, выглядит следующим образом
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
Установить зависимости
# 用于生成shell脚本的工具,可以使软件包在不同的系统下都可以编译
brew install autoconf
# 字体引擎
brew install freetype
XCode и инструменты командной строки для Xcode
Эти два SDK предоставляют компиляторы, необходимые для OpenJDK, и внешние команды, используемые в Makefile. Обычно он устанавливается на компьютер.
Многие ошибки компиляции в Интернете вызваны проблемами версии XCode, в результате чего возникают ошибки, и я тоже столкнулся с этой ямой.
configure: error: No xcodebuild tool and no system framework headers found, use --with-sysroot or --with-sdk-name to provide a path to a valid SDK
/Users/.../.../xxx.sh: line 82: 5: Bad file descriptor
configure exiting with result code 1
Наконец-то скачал с официального сайта.developer.apple.com/download/mo…Установил версию XCode 9.4.1, чтобы сделать это.
Чтобы загрузить xcode, вам необходимо войти в систему. Если у вас нет учетной записи, вы можете подать заявку на ее создание.
Я решил загрузить и установить Xcode вручную. Вы можете загрузить только инструменты командной строки (macOS 10.13) для Xcode 9.4.1 и установить его, чтобы посмотреть, сможет ли он решить вашу проблему. несколько G)
скомпилировать jdk
После того, как исходный код загружен, я распаковываю его и помещаю в этот/Users/naver/jvm/jdk12-06222165c35f
каталог, следующие команды выполняются в этом каталоге.
bash configure --with-boot-jdk='/usr/local/jdk-11.0.2.jdk/Contents/Home' --with-debug-level=slowdebug --with-target-bits=64 --disable-warnings-as-errors --enable-dtrace --with-jvm-variants=server
--with-boot-jdk
: укажите путь Bootstrap JDK.--with-debug-level
: Уровень компиляции, необязательные значения: релиз, fastdebug, slowdebug и оптимизированный, значение по умолчанию — релиз, если мы хотим отладить, нам нужно установить его на fastdebug или slowdebug, рекомендуется установить его на slowdebug--with-target-bits
: Укажите, следует ли компилировать 32-разрядную или 64-разрядную виртуальную машину.--disable-warnings-as-errors
: чтобы избежать прерывания процесса компиляции из-за предупреждений--enable-dtrace
: открыть инструмент производительности--with-jvm-variants
: Скомпилируйте виртуальную машину в определенном режиме, обычно компилируйте серверный режим здесь.--with-conf-name
: Укажите имя конфигурации компиляции. Если не указано, будет сгенерировано имя конфигурации по умолчанию macosx-x86_64-server-slowdebug. Здесь я использую конфигурацию генерации по умолчанию.
Во многих сценариях компиляция OpenJDK будет использовать--enable-ccache
параметр для ускорения скорости компиляции через ccache, но я его не использовал, так как текущая скорость компиляции на самом деле не медленная, и если добавить этот параметр, то при импорте в CLion будет много красных подсказок, что вроде не влияет на использование. , но выглядит не очень удобно
Создать базу данных компиляции
При настройке CLion напрямую импортируйте скомпилированный исходный код jdk, вы обнаружите, что все файлы заголовков окрашены в красный цвет, а приглашение не может быть найдено из-за проблемы с CMakeLists.txt, созданным CLion.Если вы хотите решить эту проблему , вам нужно изменить этот файл, очевидно, я не буду его исправлять.
Наконец, используя базу данных компиляции (blog.jet brains.com/C Lion/2020/…) Сборка OpenJDK в CLion решила проблему.
make CONF=macosx-x86_64-server-slowdebug compile-commands
После выполнения этой команды файл compile_commands.json будет создан в папке ${source_root}/build/macosx-x86_64-server-slowdebug.
компилировать
Перед импортом CLion его нужно скомпилировать, так как некоторые модули используют предварительно скомпилированные заголовки.Если не скомпилировать, CLion выдаст сообщение о том, что в процессе индексации не могут быть найдены различные файлы.
make CONF=macosx-x86_64-server-slowdebug
контрольная работа
Пока что это доказывает, что мы скомпилировали JDK12.
Отладка CLion
импортировать проект
Настройте цепочки инструментов перед импортом проекта (запись «Настройки»)
После настройки Toolchains перейдитеFile -> Open
функция, выбранная${source_root}/build/macosx-x86_64-server-slowdebug/compile_commands.json
,As a project
Откройте, чтобы файл базы данных компиляции был импортирован, а затем CLion начал индексировать.
В это время вы обнаружите, что не можете видеть исходный код, поэтому вам нужно изменить корневой каталог проекта ниже, черезTools -> Compilation Database -> Change Project Root
выберите каталог с исходным кодом, т. е.${source_root}
, чтобы вы могли видеть исходный код в CLion.
${source_root} относится к /Users/naver/jvm/jdk12-06222165c35f
Настройка перед отладкой
нуждаться вPreferences --> Build, Exceution, Deployment --> Custom Build Targets
Настроить цель сборки
Поскольку я уже настроил его здесь, страница редактирования отображается здесь.Для первой конфигурации нажмите +, чтобы добавить ее.
Благодаря этим двум конфигурациям наш jdk будет перекомпилироваться перед каждой сборкой, а повторная отладка может выполняться непосредственно после изменения кода jvm.
конфигурация отладки
Исполняемый: выберите${source_root}/build/macosx-x86_64-server-slowdebug/jdk/bin/java
или другие файлы, которые вы хотите отладить, например javac;
Перед запуском: Есть баг, когда добавляется ниже.Если убрать, то не будет заходить в Build каждый раз при выполнении, что экономит время, но на самом деле метод инкрементной компиляции OpenJDK, каждый Build очень быстрый , так что это зависит от личного выбора.
debug
существует${source_root}/src/java.base/share/native/libjli/java.c
Точка останова на строке 401, нажмите «Отладка», а затем F9, чтобы отпустить, не случайно вы столкнетесь со следующей проблемой.
Поскольку мы используем LLDB для отладки, выполнение следующих команд под LLDB при входе в первую точку останова может избежать таких проблем.
pro hand -p true -s false SIGSEGV SIGBUS
Наконец, вы можете видеть, что вывод java -version выглядит следующим образом.
Однако очень проблематично вводить такое предложение каждый раз при отладке, поэтому мы можем использовать следующую команду в файле **~/.lldbinit** для автоматической установки точки останова при каждой отладке, а затем ввестиpro hand -p true -s false SIGSEGV SIGBUS
, и, наконец, продолжить выполнение последующего процесса, содержимое файла выглядит следующим образом (где путь файла main.c заменяется на себя)
breakpoint set --file /Users/naver/jvm/jdk12-06222165c35f/src/java.base/share/native/launcher/main.c --line 98 -C "pro hand -p true -s false SIGSEGV SIGBUS" --auto-continue true
Совместная отладка с Java-программами
Приведенная выше демонстрация на самом деле показывает, как отлаживать java-версию, так как же отлаживать ее, используя написанный вами java-код в качестве записи программы?
Во-первых, java-код выглядит следующим образом (я написал его с идеей):
Конфигурация в CLion следующая
Результаты приведены ниже:
Справочная документация
>Скомпилируйте openjdk1.9 под Mac и интегрируйте динамическую отладку clion. Компиляция и отладка OpenJDK с помощью CLion на MacOS
Следуй за мной, чтобы не потеряться
Твое внимание - величайшее поощрение для меня, если ты брат, обрати внимание на меня (собачья голова спасет тебе жизнь)