openjdk11 compiling failure undefined JvmtiSampledObjectAllocEventCollector::object_alloc_is_safe_to

该变更集修复了JvmtiSampledObjectAllocEventCollector类在hotspot源码中的一个构建失败问题,新增了一个静态方法object_alloc_is_safe_to_sample,并更新了配置选项以支持特定的调试级别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://hg.openjdk.org/jdk/jdk/rev/3c12f0c0a68c

8212754: Build failure: undefined JvmtiSampledObjectAllocEventCollector::object_alloc_is_safe_to_sample
Reviewed-by: jcbeyler, zgu, coleenp

 line diff

--- a/src/hotspot/share/prims/jvmtiExport.hpp	Wed Oct 17 10:19:13 2018 +0200

+++ b/src/hotspot/share/prims/jvmtiExport.hpp	Tue Oct 23 10:55:59 2018 +0200

@@ -538,7 +538,7 @@

   JvmtiSampledObjectAllocEventCollector()  NOT_JVMTI_RETURN;

   ~JvmtiSampledObjectAllocEventCollector()  NOT_JVMTI_RETURN;

   bool is_sampled_object_alloc_event()    { return true; }

-  static bool object_alloc_is_safe_to_sample();

+  static bool object_alloc_is_safe_to_sample() NOT_JVMTI_RETURN_(false);

 };

 

 // Marker class to disable the posting of VMObjectAlloc events

bash configure --with-debug-level=slowdebug --disable-warnings-as-errors --with-native-debug-symbols=internal

### 解决 Java 运行时 `symbol lookup error: java: undefined symbol: JLI_StringDup` 错误 当遇到 `symbol lookup error: java: undefined symbol: JLI_StringDup` 的错误提示时,这通常意味着 Java 虚拟机 (JVM) 或者其依赖库中的某个符号未能被正确解析。此问题可能由多种原因引起,包括但不限于 JVM 版本不兼容、环境变量配置不当以及缺少必要的共享库。 #### 可能的原因分析 1. **版本冲突** 如果系统上安装了多个不同版本的 JDK/JRE,则可能会发生版本之间的冲突,导致某些符号无法找到。确保只保留一个所需的 JDK/JRE 安装,并将其路径设置到系统的 PATH 环境变量中[^1]。 2. **环境变量配置** 不正确的 JAVA_HOME 设置或 LD_LIBRARY_PATH 配置可能导致加载错误的库文件。确认这些环境变量指向的是期望使用的 JDK/JRE 安装目录下的 bin 和 lib 文件夹位置。 3. **缺失的共享对象(.so)文件** 对于 Linux 用户来说,如果 `/usr/lib/jvm/java-X-Y-zulu-amd64/jre/lib/amd64/server/libjvm.so` 中丢失了对 `libjava.so` 库或其他必要组件的链接,也会引发此类错误。可以通过检查并修复这些软连接来解决问题。 #### 实际操作建议 为了更具体地诊断和解决这个问题: - 使用命令 `ldd $(which java)` 来查看当前 Java 执行程序所依赖的所有动态库及其状态; - 尝试重新编译 OpenJDK 源码或将现有二进制包替换为官方发布的稳定版; - 清理旧有的 JDK/JRE 安装残留物后再进行全新安装; - 更新操作系统内核至最新补丁级别以获得更好的硬件支持和稳定性改进; 通过上述措施可以有效减少因符号查找失败而导致的应用启动异常情况的发生概率。 ```bash # 查看Java执行程序依赖关系 ldd $(which java) # 卸载所有已知的OpenJDK/RPM包 sudo yum remove java* # 下载并安装最新的Oracle JDK RPM包 wget https://download.oracle.com/otn-pub/java/jdk/<version>/jdk-<version>_linux-x64_bin.rpm sudo rpm -ivh jdk-<version>_linux-x64_bin.rpm ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值