JVM堆外内存地址是否可能更改?

时间:2018-08-31 13:06:22

标签: 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是否可以(以任何方式)介入并选择移动我的本机内存?

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

1 个答案:

答案 0 :(得分:3)

这将返回一些虚拟地址指针,并且AFAIK private static double round(double value, int places) { if (places < 0) throw new IllegalArgumentException(); BigDecimal bd = new BigDecimal(Double.toString(value)); bd = bd.setScale(places, RoundingMode.HALF_UP); return bd.doubleValue(); } ... tip =(charge * TIP_PERCENTAGE) ; tip = round(tip,2); 仅在内部调用502 Bad Gateway。作为内存,显然,GC不会触摸它,如果以后使用该指针unsafe.allocateMemory来仅发现它已移动,那将是非常糟糕和意外的。