`
java-mans
  • 浏览: 11430772 次
文章分类
社区版块
存档分类
最新评论

当用java程序去频繁读取大文件的时候将读取到的内容放在内存中

 
阅读更多

1.师兄之前常说为了提高系统效率要讲频繁读取的东西放在内存中,但是一直不明白这是什么意思,今天自己动手实现了将文件内容放在内存中,我这个文件为680M,一次性读取文件的话我的jvm内存太小,这个时候就要去修改JVM内存大小,可以直接在Eclipse里面进行修改,我修改为1G(嘿嘿当然这个时候电脑有点卡),其实读在内存中就是将内容放在静态变量中。在Eclipse里修改JVM的步骤如下:

package com.huawei;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ReadUtil {

private static ReadUtil readUtil = new ReadUtil();
public static List<String> pwTrail;
public static StringBuffer sb1 = new StringBuffer();
public static StringBuffer sb2 = new StringBuffer();





public static ReadUtil getInstance(){
return readUtil;
}

public StringBuffer readToMem(String fileName)
{
//pwTrail = new ArrayList<String>();
if(sb2.length()!=0){
return sb2;
}
try {
BufferedReader fileReader = new BufferedReader(new FileReader(new File(fileName)));
int len=0;
/*StringBuffer sb = new StringBuffer();*/
byte ch[] = new byte[1024];

while(fileReader.readLine()!= null)
{
// String str = String.valueOf(ch);
//System.out.println(fileReader.readLine());

String str = fileReader.readLine();
//StringBuffer SB=new StringBuffer();
sb1.append(str);
//pwTrail.add(str);

}
for(int i=0;i<10;i++)
sb2.append(sb1);

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return sb2;



}

public static StringBuffer getSb2() {
return sb2;
}

public static void setSb2(StringBuffer sb2) {
ReadUtil.sb2 = sb2;
}



}


这个是主函数去调用读取的方法,代码如下:

package com.huawei;

import java.util.List;

public class ReadToMem {

	/**
	 * @param args
	 */
	
	public static void main(String[] args) {
		//ReadUtil readUtil =ReadUtil.getInstance();
		//readUtil.readToMem("1.txt");
		
		long start1 = System.currentTimeMillis();
		ReadUtil readUtil2 =ReadUtil.getInstance();
		
		//List<String> pwTrail2 = readUtil2.getPwTrail();
		StringBuffer sb2 =readUtil2.readToMem("1.txt");
		System.out.println("sb2的长度"+sb2.length());
		long end1 = System.currentTimeMillis();
		System.out.println(start1);
		System.out.println(end1);
		long time1=end1-start1;
		System.out.println("读取第一个sb所需的时间:"+time1+" ms");
		
		
		long start2 = System.currentTimeMillis();
		ReadUtil readUtil3 =ReadUtil.getInstance();
		StringBuffer sb3 =readUtil3.readToMem("1.txt");
		System.out.println("sb3的长度"+sb3.length());
		//List<String> pwTrail3 = readUtil2.getPwTrail();
		long end2 = System.currentTimeMillis();
		System.out.println(start2);
		System.out.println(end2);
		long time2=end2-start2;
		System.out.println("读取第二个sb所需的时间:"+time2+" ms");
		if(sb2.equals(sb3)){
			System.out.println("sb2和sb3是相同的");
		}
		
		
		/*if(pwTrail2.size() == pwTrail3.size()){
		System.out.println("一样");
		}*/
		
	
	}

}


对比两次结果就可见效率的提高不是一般的,O(∩_∩)O哈哈~。

截图:

分享到:
评论

相关推荐

    poi大量数据读取gc内存溢出解决方案

    poi读取大量数据会造成gc内存溢出的报错,由于垃圾回收机制无法将大量的对象及时的回收,而这些对象又会保存在内存中,会导致内存不够用的情况,这时候我们就需要使用新的方法,读取为cvs即可.此解决方案可支持千万数据的...

    利用缓存机制快速读取XML文件数据

    如果频繁解析文件,速度肯定受到影响.我这样就能很大的提高了访问速度,代价是要占用一定的内存空间.每次访问的时候先判断一下要访问的文件实体有没有被更新,如果没有被更新,就直接从缓存中将想要的数据读出来,...

    java海量数据读写优化方案

    对大数据文本文件读取(按行读取)的优化,目前常规的方案有三种,第一种LineNumberReader,第二种RandomAccessFile,第三种是内存映射文件在RandomAccessFile基础上调用getChannel().map(...);代码提供在...

    apriori java 数据库读取

    apriori挖掘频繁模式和关联规则。本例使用java实现,数据库连接使用的是mysql

    快速、简洁、解决大文件内存溢出的java处理Excel工具 .rar

    EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。 EasyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知...

    JAVA 解析 Excel 工具 Java 解析、生成 Excel 比较有名的框架.rar

    EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。 EasyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知...

    java解析xml及4种常用解析比较

    然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。 SAX解析器采用了基于事件的...

    Java数据编程指南

    用UML进行对象建模 为什么使用UML 什么是UML UML图表 如何将UML建模图表配合在一起 如何将UML合并到我们的项目中 可以考虑的一些UML CASE工具 小结 第4章 数据建模 数据建模的阶段 ...

    基于 Hadoop 的海量小文件处理技术研究

    基于 Hadoop 的海量小文件处理技术研究 ,主要工作包括两个方面: 1) 基于多层索引的小...改进的 ARC 算法可以预测将会被 频繁访问的小文件并将其进行缓存,并动态置换缓存中的数据,以此提高热点小 文件的检索效率。

    基于Java实现(控制台)家庭财务管理系统【100010549】

    因为题目明确给出了五个功能,就可以写五个函数,使他们对同一个数据结构中的数据进行增删查改...至于保存记录的数据结构我选择的是链表,因为本程序功能需要频繁的删除增加数据,用链表可以很方便的执行删除插入操作。

    4_内存模型2

    1. java 内存模型 2. 可见性 1. 初始状态, t 线程刚开始从主内存读取了 run 的值到工作内存 2. 因为 t 线程要频繁从主内存中读取 run

    处理停用词清洗程序

    java程序代码,处理停用词清洗,代码中源文件是dat格式,但是读取方法与txt类型无异

    Java读取Map的两种方法与对比

    相信大家都知道在Java中Map的使用非常频繁,我们经常会需要对Map进行遍历和读取,那么下面这篇文章将展示两种遍历的方法以及简要分析。有需要的可以参考借鉴,下面来一起看看吧。

    开放实验室数据采集系统

    本文设计实现的采集系统通过调用Unix系统函数来读取这个日志文件中的内容,然后对读取到的内容进行整理为方便计费的数据,最后把这些数据存入数据库中。为了使读取的数据量不至于过大,采集系统采用每小时定时执行一...

    将excel实体表格生成为JavaBean对象

    通过读取解析固定模板中的内容,生成JavaBean类。 除了生成Bean ,也可以生成其他类,可自行扩展。 这种场景比较局限,项目开发中用到的不多,如果定义类有几十、表字段很多,同时应对项目初期,表结构表更需求较多...

    易语言程序免安装版下载

     静态编译后的易语言EXE/DLL之间不能再共享譬如窗口、窗口组件等类似资源,对于已经静态连接到一个EXE/DLL中的支持库,该支持库中的数据或资源将不能再被其它EXE/DLL中所使用的同名支持库访问。这是因为代码被分别...

    手机 pdf 阅读器

    歌词现在可以放在系统路径下的lrc目录中(由于某些手机某分大小写,因此,请使用小写) 修正使用自动退出功能时,临时关闭背景灯造成下次启动后亮度为0的bug 在设置-系统中,如果使用* #键,那么*键会旋转屏幕 [2008...

    Spring面试题

    当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。 3.Hibernate中怎样实现类之间的...

    jdbc基础和参考

    ORM:使用元数据信息来描述对象和数据库之间的关系,并且能够自动实现java中持久化对象到关系型数据库中表的映射 脏检查:自动对缓存中的数据进行检查,并且选择在合适的时机和数据库之间进行交互,以保持数据的...

    在一小时内学会 C#(txt版本)

    引用类型在堆(heap)中分配内存且当其不再使用时,将自动进行垃圾清理。和 C++ 要求用户显示创建 delete 运算符不一样,它们使用新运算符创建,且没有 delete 运算符。在 C# 中它们自动由垃圾回收系统回收。 引用...

Global site tag (gtag.js) - Google Analytics