java 堆内存不释放_Java可以写入/读取已释放的堆内存吗?

这让我感到惊讶,我正在玩

Java Unsafe.基本上我正在测试的是

Allocate unsafe memory -> free the memory -> Write to the freed memory

当我访问被释放的内存时,我期待看到某种分段错误错误,但令人惊讶的是,没有引发错误/异常.

我的代码是:

protected static final Unsafe UNSAFE;

static {

try {

Field field = Unsafe.class.getDeclaredField("theUnsafe");

field.setAccessible(true);

UNSAFE = (Unsafe) field.get(null);

} catch (Exception e) {

throw new RuntimeException(e);

}

}

@Test

public void test() {

long ptr = UNSAFE.allocateMemory(1000);

UNSAFE.freeMemory(ptr);

UNSAFE.putOrderedLong(null, ptr, 100L);

}

我的问题是,如果是这样,为什么我们需要在Unsafe中使用freeMemory()函数?真的是什么?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值