#java #macos #intellij-idea #hotswap
#java #macos #intellij-idea #горячая замена
Вопрос:
Я настраивал свою среду разработки для Java-приложения, используя java 8u202, HotSwapAgent 1.3.0, DCEVM 8u181 и IntelliJ на компьютере macOS. Все работало нормально в течение нескольких дней, когда внезапно появилась эта ошибка:
dyld: ошибка привязки отложенного символа: символ не найден: _JVM_CopySwapMemory, ссылка на который взята из: /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib / libjava.dylib Ожидается в: /Library/Java /JavaVirtualMachines/jdk1.8.0_202.jdk /Содержание/Главная страница/jre/библиотека/dcevm/libjvm.dylib
dyld: Символ не найден: _JVM_CopySwapMemory Ссылка из: /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre/lib /libjava.dylib Ожидается в: /Library/Java /JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre /lib/dcevm/libjvm.dylib
Я пытался переустановить JDK, заменить JVM на DCEVM, а не просто установить DCEVM в качестве альтернативы JVV, но ни одно из этих решений не сработало.
Кто-нибудь знает, что могло вызвать это или как это решить?
Ответ №1:
JVM_CopySwapMemory
Это новый метод, представленный JVM OpenJDK из обновления за январь 2019.
JVM_CopySwapMemory(JNIEnv *env,
jobject srcObj,
jlong srcOffset,
jobject dstObj,
jlong dstOffset,
jlong size,
jlong elemSize)
Это означает, что вам нужен определенный файл исправления для самостоятельной компиляции проекта DCEVM, если, действительно, исправление доступно.
К сожалению, последняя двоичная версия совместима только с 8u181
, а не с 8u202
.
Комментарии:
1. Чего я не понимаю, так это того, что DCEVM 8u181 работал для java 8u202, я не обновлял свою JVM, поэтому эта ошибка не должна возникать.
2. @RafaelMathias вероятно, этот метод (и содержащая его библиотека) никогда не использовались. Вам просто повезло 😉 Действительно, это было введено
8u20*
.3. Хорошо, я понизлю версию моей JVM, чтобы я мог продолжать использовать HotSwap. Спасибо!