47.直接内存

1.直接内存概述

1.直接内存不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域。
2.直接内存是在Java堆外,直接向系统申请的内存空间
3.JavaNIO库允许使用直接内存,用于数据缓冲区
4.直接内存的读写性能比堆高
在这里插入图片描述

2.IONIO对比

1.使用传统IO读写文件,涉及到了用户态和内核态的切换,每次读数据,需要将数据线读取到操作系统内核态的地址空间的内存中,然后在读取到JVM用户态的地址空间的内存中;写数据的时候需要先写到JVM用户态的地址空间内存中,然后再写到操作系统内核态的内存中。内存中需要存储两份一样的数据,效率低下。
在这里插入图片描述
2.NIO使用本地内存,不涉及到内核态与用户态的切换,读写文件都是直接操作的本地内存,读写效率更高。
在这里插入图片描述

3.直接内存的OOM与内存大小设置

1.直接内存存在于堆外,它的大小受限于系统内存的大小,如果超过系统内存的大小,就会出现OOM
2.直接内存回收成本高,不受JVM内存回收管理。
3.可以通过MaxDierctMemorySize设置直接内存大小。如果不指定,则默认值与堆的最大值-Xmx参数值一致
在这里插入图片描述

更多JVM文章请访问我的JVM专栏:
https://blog.csdn.net/u011069294/category_10113093.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值