java - JVM 堆外内存地址可能会发生变化?

标签 java garbage-collection jvm

我们有一个平台严重依赖 JVM 中的堆外内存。我们注意到,有时我们会在 GC 周期中收到 SIGSEGV:

V  [libjvm.so+0x5c56cf]  G1ParScanThreadState::copy_to_survivor_space(InCSetState, oopDesc*, markOopDesc*)+0x4bf

我完全理解这些很难追踪,但我们已经开始缩小根本案例的范围。

问题:

如果我这样做:

base = unsafe.allocateMemory(capacity);

显然,保留 base 以供以后释放,GC 是否可以(以任何方式)介入并选择移动我的 native 内存?

我知道GC应该对这种内存没有影响,但我正在寻找对此的权威答案。

最佳答案

这将返回一些虚拟地址指针和 AFAIK unsafe.allocateMemory 只会在内部调用 malloc。作为一个 堆外 内存,显然 GC 不会触及它,如果您稍后对该指针执行 Unsafe.freeMemory 以仅查找,那将是非常糟糕和意外的它移动了。

关于java - JVM 堆外内存地址可能会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52116139/

相关文章:

jboss - 由于 org.infinispan.util.concurrent.jdk8backported.LongAdder 中的 `EXCEPTION_ACCESS_VIOLATION` 导致 JVM 崩溃

java - 为什么我们使用 <cxf :rsServer> as opposed to a plain <jaxrs:server> when using the CXF-RS component?

java - android studio View 在设计模式下不显示

java - JRuby 中的安全级别

java - 元空间和垃圾收集

functional-programming - 对于纯粹的、函数式的、热切评估的语言,垃圾收集器可以安全地做出哪些假设?

java - jvm 的热插拔功能有何不同?

java - 我不知道如何用Java实现接口(interface)

java - 黑色 Activity 给出错误android studio

java - 如何配置GC不让世界停止?