内存与垃圾回收篇--11直接内存--B站尚硅谷JVM课程学习

本文探讨了Java中的直接内存,它不是JVM规范的一部分,而是通过NIO直接向系统申请的本地内存,用于提高读写性能。直接内存的分配和释放成本较高,可能导致OOM异常。示例代码展示了如何分配和释放直接内存,并提示了内存管理的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接内存

  • 不是虚拟机运行时数据区的一部分,也不是JVM规范定义的内存区域
  • Java堆外的、直接向系统申请的本地内存
  • 来源NIO(new IO / Non-Blocking IO),通过堆中的DirectoryBuffer操作Native内存
  • 通常访问直接内存的速度高于Java堆,即读写性能高
  • 可能出现OOM异常(Direct buffer memory),因为堆空间较大,直接内存空间较小
  • 分配回收成本较高
  • 不受JVM内存管理
public class BufferTest {

    private static final int BUFFER = 1024 * 1024 * 1024; //1GB

    public static void main(String[] args) {
//      //直接分配本地内存空间
        ByteBuffer byteBuffer = ByteBuffer.allocateDirect(BUFFER);
        System.out.println("直接分配完毕,请求指示。");
        Scanner scanner = new Scanner(System.in);
        scanner.next();

        System.out.println("内存释放。。");

        byteBuffer = null;
        System.gc();
        scanner.next();
    }
}

// allocateDirect 源码

    public static ByteBuffer allocateDirect(int capacity) {
        return new DirectByteBuffer(capacity);
    }

简单理解:内存空间= 堆空间 + 本地内存(直接内存)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值