我在多个线程不断处理2G以上的文件时候 应用文件映射内存的方式来读取文件【只有读取操作无写操作】
没个线程在处理一个文件的时候大概是这样的过程1.每次映射6M到内存,读取完6M后循环 再读取后面6M这样循环知道读完文件
大概是这样一个过程代码没贴出,简单写下。MappedByteBuffer buffer =nullfor(int i=0; i<1000;i++){
start + 6000000;
buffer = fileChannel.map (FileChannel.MapMode.READ_ONLY, strat, 6000000);
read(buffer);
buffer.clear()}这就出个问题,我发现内存会不够用,貌似每次的buffer都是新建一个,而旧的并没有清空。而每次循环玩一次我都调用了
buffer.clear()高手分析下问题出在哪? 在线等
没个线程在处理一个文件的时候大概是这样的过程1.每次映射6M到内存,读取完6M后循环 再读取后面6M这样循环知道读完文件
大概是这样一个过程代码没贴出,简单写下。MappedByteBuffer buffer =nullfor(int i=0; i<1000;i++){
start + 6000000;
buffer = fileChannel.map (FileChannel.MapMode.READ_ONLY, strat, 6000000);
read(buffer);
buffer.clear()}这就出个问题,我发现内存会不够用,貌似每次的buffer都是新建一个,而旧的并没有清空。而每次循环玩一次我都调用了
buffer.clear()高手分析下问题出在哪? 在线等
解决方案 »
- struts action问题
- 总是报错:语法错误,将“AssignmentOperator 表达式”插入到完整 表达式 中。。。。并且不能删除.object obj;是出错位置
- NoSuchBeanDefinitionException怎么解决?
- 如何用J2EE技能为自己挣一台笔记本?
- Hibernate配置有问题,请大家帮忙看看
- weblogic ..JDK出现了java.lang.NoClassDefFoundError....
- JTable
- about Time Service
- 请大家谈谈目录服务,在数据库里我提问了,没人理我:(,交流有分!
- java基础知识汇总~个人
- 求BS架构下的即时通信技术
- SpringMVC3.0与ExtJs整合表单数据如何自动注入到Model
还是可以让每次映射都在同一块内存上 覆盖上面的数据
不过我还是觉得问题不是出在FileChannel的操作上,应该是read函数中的操作要么申请了过多内容,要么引用了buffer对象,导致JVM做GC的时候不能将其回收。