JVM——直接内存

直接内存

定义(Direct Memory)

1.常见于 NIO 操作时,用于数据缓冲区。
2.分配回收成本较高,但读写性能高。
3.不受 JVM 内存回收管理。
4.本机直接内存的分配不会受到Java 堆大小的限制,受到本机总内存大小限制。
5.配置虚拟机参数时,不要忽略直接内存,防止出现OutOfMemoryError异常。
在这里插入图片描述

在这里插入图片描述
从这两张图能明显看出直接内存的重要性,避免了原来的两次缓冲,节约了内存空间,缩短了运行时间。

直接内存使用场景

1.有很多很大的数据需要存储,它的生命周期很长。
2.适合频繁的IO操作,例如网络并发场景。

分配和回收原理

使用了 Unsafe 对象完成直接内存的分配回收,并且回收需要主动调用 freeMemory 方法。

ByteBuffer 的实现类内部,使用了 Cleaner (虚引用)来监测 ByteBuffer 对象,一旦ByteBuffer 对象被垃圾回收,那么就会由 ReferenceHandler 线程通过 Cleaner 的 clean 方法调
用 freeMemory 来释放直接内存。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真真最可爱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值