理解Java heap内存和Java direct内存

Java Heap内存

Java应用运行在Java运行环境(JVM),Java heap内存是JVM为java应用分配的内存。JVM被设计就是为了从机器上隔离应用。通常讨论Java内存,就是指Java heap内存。
可以使用-Xmx,-Xms来修改Java heap内存分配

Java direct内存

Java1.4介绍了Direct内存,新的IO(NIO)类是基于channels和buffers来进行IO操作。NIO添加对direct ByteBuffers的支持,可以直接操作本地内存,而不是Java Heap内存,这样会性能更高,因为会避免在本地heap和Java heap之间的复制数据。
当然NIO也支持non-direct ByteBuffer,会以字节数组形式存储数据到Java Heap。
ByteBuffer类定义在java.nio中

  java.lang.Object
        java.nio.Buffer
            java.nio.ByteBuffer

ByteBuffer既支持direct也支持non-direct。如果是direct bytebuffer,JVM会基于它直接做本地化IO操作,这样会避免缓存内容的复制。
但是应用仍然需要一个在Java Heap的对象来编排IO操作,但是存储的缓存内容是在本地内存。Java Heap对象仅仅包含对本地内容的应用。

垃圾收集器

垃圾收集器是在Java Heap中释放不用Java对象的JVM进程,Java Heap是Java程序对象生存的地方,包含存活的对象,无用的对象,释放的内存。当一个对象不再使用后,被认为是垃圾,就要准备回收。
JVM并不是不会管理direct内存,在direct内存的对象在Java Heap中有一个引用,当这个引用被回收会,在direct内存的对象也会释放掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值