java直接内存

直接内存

    直接内存是操作系统内存,常见于NIO操作,用于数据缓冲区
    分配回收成本高,但是读写性能高
    不受垃圾回收管理    
    
    

    为什么使用ByteBuffer或者说直接内存读写效率高?
        java本身没有磁盘读写能力,要调用本地方法来处理
        java要想访问系统磁盘中数据,要先从系统缓冲区将数据读入到java缓冲区,
            再从Java缓冲区来读数据,再写入操作


        ByteBuffer bb=ByteBuffer.allocateDirect(_1MB)
        但是用了ByteBuffer直接内存.会直接在系统缓冲区搞一个缓冲区,
        java可以访问到这个缓冲区,速度更快


    直接内存会溢出:        OutOfMemoryError

    直接内存会被回收:        
        释放原理:    Unsafe类,用来分配和处理直接内存的
                一般不会使用,一般是jdk内部使用的
            long addr=unsafe.allocateMemory(_1GB);    //设置内存大小
            void unsafe.freeMemory(addr);        //释放内存

            当ByteBuffer被垃圾回收的时候,自动会调用Cleaner类中clean方法
            clean方法中会执行Unsafe类中的freeMemory方法


    分配与回收原理:    
        -XX:+DisableExplicitGC    禁用显式垃圾回收
        也就是禁用 System.gc(); 来进行垃圾回收
        因为显式垃圾回收用的是FUll GC,要回收新生代和老年代,让程序暂停时间长,非常耗性能
        所以一般会禁用


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值