nio 使用的都是直接内存吗?
来源:互联网 发布:Linux安装sip 编辑:程序博客网 时间:2024/04/29 14:41
前两天测试问了个问题,就是内存爆掉,排查原因是因为缓存东西太多,而他把缓存的东西读取到list中,每请求一次读取一次,没有释放掉导致内存溢出,本来还以为是请求过多是nio的原因。
后来经过nio的socketChannel 和 ServerSocketChannel测试,
在配置jvm参数(-Xmx100M -Xms100M -Xmn30M)发现在客户端有5000不到的空连接的时候,会出现内存溢出,现在就不禁会疑惑了,不是nio使用的都是直接内存吗,经过今天对tomcat 8.5的测试,发现请求进来,内存分配都是在堆中,通过查看源码发现
在ByteBuffer 有两个子类比较重要HeapByteBuffer和DirectByteBuffer,字面意思上理解,第一个是堆中的,第二个是机器内存中的。
例如,在byteBuffer申请内存的时候有两个方法
申请堆内存
public static ByteBuffer allocate(int capacity) { if (capacity < 0) throw new IllegalArgumentException(); return new HeapByteBuffer(capacity, capacity); }
申请直接内存
public static ByteBuffer allocateDirect(int capacity) { return new DirectByteBuffer(capacity); }
所以nio中使用直接内存还是堆内存,取决于我们使用的是哪一个ByteBuffer申请内存的方法
阅读全文
0 0
- nio 使用的都是直接内存吗?
- NIO-直接内存
- 使用NIO的直接缓存区复制文件
- Java内存--直接内存(Direct Memory)---NIO
- 都是内存惹的祸
- NIO的使用
- NIO的使用
- NIO的使用
- Java NIO的使用
- java nio的使用
- NIO的使用心得
- NIO的简单使用
- NIO使用的例子
- 不采用第三方直接使用Intent分享,主要都是针对国外的比如FB,Line,WhatsApp,Telegram
- 使用NIO来操作文件,内存映射
- 【NIO】更简单的nio使用方式
- NIO学习二、NIO的基本使用
- 11年的都是可以直接破解光驱的吗?03和05的光驱主板都是如何用jf单破的呢?gif
- Transaction rolled back because it has been marked as rollback-only
- 奇偶剪枝&1010 Tempter of the Bone
- PHP HTTP客户端-Guzzle原理解析
- 1028. List Sorting (25)
- 我的AI转型之路与AI之我见(非985211的奋斗路程与视角)
- nio 使用的都是直接内存吗?
- Java多线程综述
- BZOJ3343[教主的魔法]
- "-"滚动条(CScoollar)综合文件
- Spring事务管理(详解+实例)
- 深度卷积生成式对抗网络,Deep Convolutional Generative Adversarial Nerworks
- Java GC专家系列2:Java 垃圾回收的监控
- "-"对话框(Dialog)汇总文件
- LeetCode.395