一切都很好,但最近的 Java 更新将 Java 目录中的所有内容都删除了,包括不属于它的内容。现在我试图让 Hotspot 汇编打印输出再次工作,但它不断导致 VM 崩溃。
我已经多次这样做了(而且似乎经常会出现问题)。
我从 Kenai 下载了 hsdis-amd64.so:https://kenai.com/projects/base-hsdis/downloads
我将其移至:/usr/lib/jvm/java-8-oracle/jre/lib/amd64/hsdis-amd64.so
现在,当我尝试使用 Java 时,它会崩溃。我在网上找不到任何关于此问题的信息。如果我无法让它正常工作,我将不得不以某种方式恢复到以前的 Java 更新。
me@machine:~$ java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -version
76 1 3 java.lang.String::hashCode (55 bytes)
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGBUS (0x7) at pc=0x00007f5e56e7f97a, pid=16820, tid=140042649700096
#
# JRE version: Java(TM) SE Runtime Environment (8.0_31-b13) (build 1.8.0_31-b13)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.31-b07 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C [ld-linux-x86-64.so.2+0x1a97a]
答案1
哦不。愚蠢的回答。
当 Ubuntu 如此好心地决定为我升级 Java 版本时,它删除了我的 Oracle JDK 并将其替换为 Open JDK。据我所知,旧的 hsdis 插件仅适用于 Oracle JDK。
解决方案是构建一个与 Open JDK 兼容的新 hsdis。值得庆幸的是,有人(实际上是几个人)已经完成了大部分工作:
https://github.com/abak/openjdk-hsdis
所有构建说明均位于底部。
(是的,用一个非常简单的答案来回答我自己的问题,我感觉有点愚蠢。我不会删除这个问题,而是让其他人来决定。不过,如果这个问题出现在搜索结果中,我会让我一天中多花一半的时间更有效率。)