JVM堆外内存地址是否有变化?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JVM堆外内存地址是否有变化?相关的知识,希望对你有一定的参考价值。

我们有一个很大程度上依赖于JVM中的堆外内存的平台。我们注意到,在GC循环期间,我们不时得到SIGSEGV:

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

我完全理解那些很难追查,但我们已经开始缩小根案例。

问题:

如果我做:

base = unsafe.allocateMemory(capacity);

并且,显然,保留base以便以后释放,可以(以任何方式)GC参与并选择移动我的本机记忆?

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

答案

这将返回一些虚拟地址指针,AFAIK unsafe.allocateMemory将在内部调用malloc。作为一个堆外记忆,显然GC不会触及它,如果你以后会用那个指针做Unsafe.freeMemory,那将是非常糟糕和意外的,只发现它移动了。

以上是关于JVM堆外内存地址是否有变化?的主要内容,如果未能解决你的问题,请参考以下文章

java堆外内存

jvm堆外内存排查详解

jvm堆外内存排查详解

jvm堆外内存排查详解

jvm实际占用内存大于堆堆内+堆外推测

Java堆外内存之突破JVM枷锁