![最近 Java 8 更新,现在 +PrintAssembly 在 14.10 上崩溃](https://linux22.com/image/867933/%E6%9C%80%E8%BF%91%20Java%208%20%E6%9B%B4%E6%96%B0%EF%BC%8C%E7%8E%B0%E5%9C%A8%20%2BPrintAssembly%20%E5%9C%A8%2014.10%20%E4%B8%8A%E5%B4%A9%E6%BA%83.png)
一切都很好,但最近的 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
所有构建说明均位于底部。
(是的,用一个非常简单的答案来回答我自己的问题,我感觉有点愚蠢。我不会删除这个问题,而是让其他人来决定。不过,如果这个问题出现在搜索结果中,我会让我一天中多花一半的时间更有效率。)