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参数值一致
在这里插入图片描述

posted @ 2020-11-18 18:31  跃小云  阅读(75)  评论(0编辑  收藏  举报