- 浏览: 758599 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (663)
- Eclipse&MyEclipse (40)
- PHP (3)
- Java (72)
- CSS (3)
- MySQL (35)
- Oracle (68)
- Red Hat Linux (23)
- Tomcat (26)
- Oracle10gAS (1)
- Spring (28)
- MyBatis&iBatis (13)
- JS (47)
- JQuery (23)
- Editplus (2)
- 其他 (4)
- Html (15)
- SQL (5)
- Ant (2)
- Hadoop (2)
- Servlet (9)
- Windows (11)
- Flex (1)
- CentOS Linux (7)
- Microsoft SQL Server (2)
- DB2 (3)
- Mysql char 与 varchar 区别 (0)
- excel (5)
- jsp (8)
- FreeMarker (1)
- EasyUI (5)
- WebShpere MQ (1)
- Maven2 (6)
- 浏览器缓存 (2)
- visio (1)
- XML (2)
- 物联网 (1)
- Maven (3)
- JSTL (2)
- HTTP (1)
- Fourinone (1)
- IP知识 (1)
- MyBatis (1)
- 项目管理 (2)
- office2003+2007 (1)
- DOS (1)
- JProfiler (1)
- Thinpad T440p (1)
- ActiveMQ (10)
- MongoDB (5)
- Vert.x3 (1)
- Ngnix (3)
- Spark (2)
- BigData (1)
- 性能概念公式 (1)
- RocketMQ (3)
- IT名词术语 (1)
- Java编程工具 (1)
- RabbitMQ (2)
- MetaMQ (1)
- 架构 (6)
- KafkaMQ (7)
- Redis (4)
- OAuth (1)
- Gradle (1)
- CentOS (5)
- Microsoft_Toolkit (1)
- git (5)
- IntelliJ Idea (4)
- Nginx (3)
- docker (12)
- VMware (2)
- 算法 (1)
- JDBCPool (1)
- spring-cloud (7)
- netbean (1)
- 微信小程序 (2)
- CURL (2)
- Java生成二维码 (1)
- 区块链 (2)
- 机器学习 (1)
- SpringBoot (3)
- Android (9)
- 微服务架构 (1)
- Kubernetes (2)
- OpenProject (0)
- 测试 (1)
- https (1)
- 开源许可证 (1)
- ServiceMesh (2)
- NET (0)
- .NET (1)
- TEST (1)
- iOS (2)
- thymeleaf (4)
- lombok (1)
- 浏览器设置 (1)
- 富文本编辑器 (1)
- 搜索引擎 (1)
- IT常识 (1)
- UML (0)
- Axure (1)
- appstore无法联网 (0)
- apk无法安装 (1)
- SQLServer (2)
- 卸载弹窗软件 (1)
- jenkins (1)
- TortoiseGit (1)
- eureka (1)
- ajax (1)
- spyder (0)
最新评论
一、从数据库中取大量数据(10万行左右)的时候,用jxl工具写excel,由于jxl是将每一个单元格生都成一个Cell对象,每一个对象都要消耗一定的内存空间,所以很容易导致内存溢出:
sheet0.addCell(new Label(colnum++,rownum,rs.getString("aname"),stuformat))//
tomcat报异常为:
java.lang.OutOfMemoryError: Java heap space
虽然在数据量在1—2万行左右的情况下,不会报异常,但是对服务器的资源消耗也是比较大的。
二、解决方法
要从消耗内存的原因出发解决,既然是由于生成大量的对象导致,就避免java创建太多的对象,就不能用jxl了。
另外可以对提前的数据进行情况来提取,对于不需要的数据可以不提取,节省时间和资源消耗。
用数据流的方法解决:
(1)直接写.txt文本文件,用”/t”来分割内容,可以从txt中直接复制到excel文件中。
public static void main(String[] args) {
try {
FileOutputStream fos = new FileOutputStream("hellotxt.txt");
OutputStreamWriter osw=new OutputStreamWriter(fos);
osw.write("aaa,bbb,ccc,ddd,eee,fff/r/n");
osw.write("aaa/tbbb/tccc/tddd/teee/tfff/r/n");
osw.flush();
osw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
记事本打开效果如下:
aaa,bbb,ccc,ddd,eee,fff
aaa bbb ccc ddd eee fff
直接从记事本负责粘贴到excel中,效果如下:
aaa,bbb,ccc,ddd,eee,fff
aaa
bbb
ccc
ddd
eee
fff
(2)也可以写成.csv
.csv文件打开格式跟excel基本一样,但是写入方式和写文本方式类似,可以以流的形式追加,只要在每列之间以固定标识符进行间隔,不存在内存和格式问题.
public static void main(String[] args) {
try {
FileWriter fw = new FileWriter("helloCsv.csv");
fw.write("aaa,bbb,ccc,ddd,eee,fff,ggg,hhh/r/n");
fw.write("aa1,bb1,cc1,dd1,ee1,ff1,gg1,hh1/r/n");
fw.write("aaa/r/n");
fw.write("aa2,bb2,cc2,dd2,ee2,ff2,gg2,hh2/r/n");
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
用excel打开文件显示如下,可以看到英文的逗号被作为了分割符而不显示出来。
aaa
bbb
ccc
ddd
eee
fff
ggg
hhh
aa1
bb1
cc1
dd1
ee1
ff1
gg1
hh1
aaa
aa2
bb2
cc2
dd2
ee2
ff2
gg2
hh2
用记事本打开显示如下,逗号被作为内容的一部分显示出来:
aaa,bbb,ccc,ddd,eee,fff,ggg,hhh
aa1,bb1,cc1,dd1,ee1,ff1,gg1,hh1
aaa
aa2,bb2,cc2,dd2,ee2,ff2,gg2,hh2
注:写.csv文件的时候要注意里面的英文逗号,在用excel打开.csv文件的时候,英文逗号作为单元格之间的分隔符不显示出来。所以写的内容中的英文逗号要替换掉。
(3)写html
HTML 和 Excel之间通过改后缀名是可以相互转换的, 所以,可以先写HTML,这样内存不会溢出,写好后再改成xls后缀名。
打开一个EXCEL,然后,选择另存为网页,可以看一下这个HTML的源码,直接把这个HTML文件后缀名改为xls,打开后效果和刚才那个EXCEL一样,但是会文件会变大。但是,压缩后比EXCEL还小。
以上几种方法以写.txt文件操作简单,效率比较高,写.csv文件效率跟写txt文件查不多,而且在小于65535行的情况下可以直接用excel打开,如果采用这个方法并且想用excel直接打开,行数如果多于65535行需要写多个.csv文件,并且要注意替换掉内容中的英文逗号,写html文件要写大量的标签,相对txt和csv文件内容会增加很多,具体写法可以上网查。比较优劣效率易编写情况,综合得出可以采用写txt和csv方法。
在网上查询相关资料,结合本案例,做的一个测试:
在java写文件中,通常会使用FileOutputStream和FileWriter,FileWriter只能写文本文件。 FileOutputStream也经常结合BufferedOutputStream。因为实际应用中写文本文件的情况占了大多数,对于java些excel的时候有jxl包,所以下面测试用不同的方式生成一个相同行数、大小相同的文件的四种不同方式。测试一下生成数据的时间,文件的大小,已经可以间接的看出消耗内存的情况。
FileOutputStream 用于写入诸如图像数据之类的原始字节的流。
要写入字符流,请考虑使用 FileWriter。
BufferedOutputStream该类实现缓冲的输出流。通过设置这种输出流,应用程序就可以将各个字节写入基础输出流中,而不必为每次字节写入调用基础系统。
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
public class createDataFile {
public static void main(String[] args) {
// TODO Auto-generated method stub
FileOutputStream out = null;
FileOutputStream outSTr = null;
BufferedOutputStream Buff=null;
FileWriter fw = null;
WritableWorkbook wb=null;
int count=100000;//写文件行数
try {
long begin = System.currentTimeMillis();
out = new FileOutputStream(new File("C:/add1.txt"));
for (int i = 0; i < count; i++) {
out.write("测试java 文件操作/r/n".getBytes());
}
out.close();
long end = System.currentTimeMillis();
// System.out.println((float)(new File("C:/add1.txt").length())/1024/1024);
System.out.println("FileOutputStream执行耗时:" + (end - begin) + " 豪秒");
long begin0 = System.currentTimeMillis();
outSTr = new FileOutputStream(new File("C:/add2.txt"));
Buff=new BufferedOutputStream(outSTr);
for (int i = 0; i < count; i++) {
Buff.write("测试java 文件操作/r/n".getBytes());
}
Buff.flush();
Buff.close();
long end0 = System.currentTimeMillis();
System.out.println("BufferedOutputStream执行耗时:" + (end0 - begin0) + " 豪秒");
long begin3 = System.currentTimeMillis();
fw = new FileWriter("C:/add3.txt");
for (int i = 0; i < count; i++) {
fw.write("测试java 文件操作/r/n");
}
fw.close();
long end3 = System.currentTimeMillis();
System.out.println("FileWriter执行耗时:" + (end3 - begin3) + " 豪秒");
//生成excel
long begin4=System.currentTimeMillis();
wb=Workbook.createWorkbook( new File( "c:/test.xls" ));
WritableSheet sheet0= wb.createSheet( "sheet1",0);
//System.out.print(wb.getNumberOfSheets());
int rownum=0;
int limint=1;
int snum=0;
for(int i=0;i<count;i++){
sheet0.addCell(new Label(0,rownum++,"测试java 文件操作"));
limint++;
if(limint>65530){
snum++;
wb.createSheet("sheet"+(wb.getNumberOfSheets()+1),wb.getNumberOfSheets()+1);//增加一个sheet
sheet0 = wb.getSheet(snum);
rownum = sheet0.getRows();
limint=0;
}
}
wb.write();
wb.close();
long end4=System.currentTimeMillis();
System.out.println("jxl生成excel执行耗时:" + (end4 - begin4) + " 豪秒");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
以下结果经过多次执行,取常出现的数据,由于只是简单比较,不做详细统计。
1. 当count=1000的,即写文件1000行的时候,写出的文件大小为18.5KB:
FileOutputStream执行耗时:16 豪秒
BufferedOutputStream执行耗时:16 豪秒
FileWriter执行耗时:15 豪秒
jxl生成excel执行耗时:296 豪秒 文件大小为47KB
2.当count=10000的,即写文件10000行的时候,写出的文件大小为185KB:
FileOutputStream执行耗时:94 豪秒
BufferedOutputStream执行耗时:15 豪秒
FileWriter执行耗时:16 豪秒
jxl生成excel执行耗时:391 豪秒 文件大小为369KB
3.当count=100000的,即写文件100000行的时候,写出的文件大小为1856KB:
FileOutputStream执行耗时:594 豪秒
BufferedOutputStream执行耗时:94 豪秒
FileWriter执行耗时:78 豪秒
jxl生成excel执行耗时:2625 豪秒 文件大小为3592KB
4.当count=1000000的,即写文件1000000行的时候,写出的文件大小为18555KB:
FileOutputStream执行耗时:5625 豪秒
BufferedOutputStream执行耗时:1328 豪秒
FileWriter执行耗时:875 豪秒
执行生成excel的时候出现了异常:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
由以上数据可以看到,用文件流来写的速度比写excel的速度要快很多,生成的文件大小也比较小大小相差一半左右,而且从最后一项来看,写excel的时候对java虚拟机内存消耗也比较大,会报异常。
用流来写的三种方法中比较得出:如果不用缓冲流BufferedOutputStream,FileOutputStream写文件的是很不好的。当写 1000000行的文件的时候,FileOutputStream比FileWriter要慢4750毫秒, BufferedOutputStream比FileWriter慢553毫秒。
不要小看这几秒的时间。当操作的数据量很大的时候,这点性能的差距就会很大了。在通用数据迁移工具导出数据库2千万条记录生成sql脚本文件的时候,性能性能相差2分钟以上。
sheet0.addCell(new Label(colnum++,rownum,rs.getString("aname"),stuformat))//
tomcat报异常为:
java.lang.OutOfMemoryError: Java heap space
虽然在数据量在1—2万行左右的情况下,不会报异常,但是对服务器的资源消耗也是比较大的。
二、解决方法
要从消耗内存的原因出发解决,既然是由于生成大量的对象导致,就避免java创建太多的对象,就不能用jxl了。
另外可以对提前的数据进行情况来提取,对于不需要的数据可以不提取,节省时间和资源消耗。
用数据流的方法解决:
(1)直接写.txt文本文件,用”/t”来分割内容,可以从txt中直接复制到excel文件中。
public static void main(String[] args) {
try {
FileOutputStream fos = new FileOutputStream("hellotxt.txt");
OutputStreamWriter osw=new OutputStreamWriter(fos);
osw.write("aaa,bbb,ccc,ddd,eee,fff/r/n");
osw.write("aaa/tbbb/tccc/tddd/teee/tfff/r/n");
osw.flush();
osw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
记事本打开效果如下:
aaa,bbb,ccc,ddd,eee,fff
aaa bbb ccc ddd eee fff
直接从记事本负责粘贴到excel中,效果如下:
aaa,bbb,ccc,ddd,eee,fff
aaa
bbb
ccc
ddd
eee
fff
(2)也可以写成.csv
.csv文件打开格式跟excel基本一样,但是写入方式和写文本方式类似,可以以流的形式追加,只要在每列之间以固定标识符进行间隔,不存在内存和格式问题.
public static void main(String[] args) {
try {
FileWriter fw = new FileWriter("helloCsv.csv");
fw.write("aaa,bbb,ccc,ddd,eee,fff,ggg,hhh/r/n");
fw.write("aa1,bb1,cc1,dd1,ee1,ff1,gg1,hh1/r/n");
fw.write("aaa/r/n");
fw.write("aa2,bb2,cc2,dd2,ee2,ff2,gg2,hh2/r/n");
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
用excel打开文件显示如下,可以看到英文的逗号被作为了分割符而不显示出来。
aaa
bbb
ccc
ddd
eee
fff
ggg
hhh
aa1
bb1
cc1
dd1
ee1
ff1
gg1
hh1
aaa
aa2
bb2
cc2
dd2
ee2
ff2
gg2
hh2
用记事本打开显示如下,逗号被作为内容的一部分显示出来:
aaa,bbb,ccc,ddd,eee,fff,ggg,hhh
aa1,bb1,cc1,dd1,ee1,ff1,gg1,hh1
aaa
aa2,bb2,cc2,dd2,ee2,ff2,gg2,hh2
注:写.csv文件的时候要注意里面的英文逗号,在用excel打开.csv文件的时候,英文逗号作为单元格之间的分隔符不显示出来。所以写的内容中的英文逗号要替换掉。
(3)写html
HTML 和 Excel之间通过改后缀名是可以相互转换的, 所以,可以先写HTML,这样内存不会溢出,写好后再改成xls后缀名。
打开一个EXCEL,然后,选择另存为网页,可以看一下这个HTML的源码,直接把这个HTML文件后缀名改为xls,打开后效果和刚才那个EXCEL一样,但是会文件会变大。但是,压缩后比EXCEL还小。
以上几种方法以写.txt文件操作简单,效率比较高,写.csv文件效率跟写txt文件查不多,而且在小于65535行的情况下可以直接用excel打开,如果采用这个方法并且想用excel直接打开,行数如果多于65535行需要写多个.csv文件,并且要注意替换掉内容中的英文逗号,写html文件要写大量的标签,相对txt和csv文件内容会增加很多,具体写法可以上网查。比较优劣效率易编写情况,综合得出可以采用写txt和csv方法。
在网上查询相关资料,结合本案例,做的一个测试:
在java写文件中,通常会使用FileOutputStream和FileWriter,FileWriter只能写文本文件。 FileOutputStream也经常结合BufferedOutputStream。因为实际应用中写文本文件的情况占了大多数,对于java些excel的时候有jxl包,所以下面测试用不同的方式生成一个相同行数、大小相同的文件的四种不同方式。测试一下生成数据的时间,文件的大小,已经可以间接的看出消耗内存的情况。
FileOutputStream 用于写入诸如图像数据之类的原始字节的流。
要写入字符流,请考虑使用 FileWriter。
BufferedOutputStream该类实现缓冲的输出流。通过设置这种输出流,应用程序就可以将各个字节写入基础输出流中,而不必为每次字节写入调用基础系统。
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
public class createDataFile {
public static void main(String[] args) {
// TODO Auto-generated method stub
FileOutputStream out = null;
FileOutputStream outSTr = null;
BufferedOutputStream Buff=null;
FileWriter fw = null;
WritableWorkbook wb=null;
int count=100000;//写文件行数
try {
long begin = System.currentTimeMillis();
out = new FileOutputStream(new File("C:/add1.txt"));
for (int i = 0; i < count; i++) {
out.write("测试java 文件操作/r/n".getBytes());
}
out.close();
long end = System.currentTimeMillis();
// System.out.println((float)(new File("C:/add1.txt").length())/1024/1024);
System.out.println("FileOutputStream执行耗时:" + (end - begin) + " 豪秒");
long begin0 = System.currentTimeMillis();
outSTr = new FileOutputStream(new File("C:/add2.txt"));
Buff=new BufferedOutputStream(outSTr);
for (int i = 0; i < count; i++) {
Buff.write("测试java 文件操作/r/n".getBytes());
}
Buff.flush();
Buff.close();
long end0 = System.currentTimeMillis();
System.out.println("BufferedOutputStream执行耗时:" + (end0 - begin0) + " 豪秒");
long begin3 = System.currentTimeMillis();
fw = new FileWriter("C:/add3.txt");
for (int i = 0; i < count; i++) {
fw.write("测试java 文件操作/r/n");
}
fw.close();
long end3 = System.currentTimeMillis();
System.out.println("FileWriter执行耗时:" + (end3 - begin3) + " 豪秒");
//生成excel
long begin4=System.currentTimeMillis();
wb=Workbook.createWorkbook( new File( "c:/test.xls" ));
WritableSheet sheet0= wb.createSheet( "sheet1",0);
//System.out.print(wb.getNumberOfSheets());
int rownum=0;
int limint=1;
int snum=0;
for(int i=0;i<count;i++){
sheet0.addCell(new Label(0,rownum++,"测试java 文件操作"));
limint++;
if(limint>65530){
snum++;
wb.createSheet("sheet"+(wb.getNumberOfSheets()+1),wb.getNumberOfSheets()+1);//增加一个sheet
sheet0 = wb.getSheet(snum);
rownum = sheet0.getRows();
limint=0;
}
}
wb.write();
wb.close();
long end4=System.currentTimeMillis();
System.out.println("jxl生成excel执行耗时:" + (end4 - begin4) + " 豪秒");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
以下结果经过多次执行,取常出现的数据,由于只是简单比较,不做详细统计。
1. 当count=1000的,即写文件1000行的时候,写出的文件大小为18.5KB:
FileOutputStream执行耗时:16 豪秒
BufferedOutputStream执行耗时:16 豪秒
FileWriter执行耗时:15 豪秒
jxl生成excel执行耗时:296 豪秒 文件大小为47KB
2.当count=10000的,即写文件10000行的时候,写出的文件大小为185KB:
FileOutputStream执行耗时:94 豪秒
BufferedOutputStream执行耗时:15 豪秒
FileWriter执行耗时:16 豪秒
jxl生成excel执行耗时:391 豪秒 文件大小为369KB
3.当count=100000的,即写文件100000行的时候,写出的文件大小为1856KB:
FileOutputStream执行耗时:594 豪秒
BufferedOutputStream执行耗时:94 豪秒
FileWriter执行耗时:78 豪秒
jxl生成excel执行耗时:2625 豪秒 文件大小为3592KB
4.当count=1000000的,即写文件1000000行的时候,写出的文件大小为18555KB:
FileOutputStream执行耗时:5625 豪秒
BufferedOutputStream执行耗时:1328 豪秒
FileWriter执行耗时:875 豪秒
执行生成excel的时候出现了异常:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
由以上数据可以看到,用文件流来写的速度比写excel的速度要快很多,生成的文件大小也比较小大小相差一半左右,而且从最后一项来看,写excel的时候对java虚拟机内存消耗也比较大,会报异常。
用流来写的三种方法中比较得出:如果不用缓冲流BufferedOutputStream,FileOutputStream写文件的是很不好的。当写 1000000行的文件的时候,FileOutputStream比FileWriter要慢4750毫秒, BufferedOutputStream比FileWriter慢553毫秒。
不要小看这几秒的时间。当操作的数据量很大的时候,这点性能的差距就会很大了。在通用数据迁移工具导出数据库2千万条记录生成sql脚本文件的时候,性能性能相差2分钟以上。
发表评论
-
文本域显示行数算法
2021-03-10 22:46 280每行显示字符数: showCount 总共字符数:tot ... -
[初级容易犯错的地方]JAVA方法中的参数用final来修饰的效果(转)
2020-11-23 16:52 232今天顺便看到这个文章,转发一下,因是很多初级者容易犯错的地 ... -
Java批量解析微信dat文件,微信图片破解
2020-02-17 20:33 2035package com.chinada.dms.test.y ... -
Spring Framework 5.0 入门篇(转)
2019-04-25 10:00 01.为什么学习Spring? 随着对Java EE ... -
类中内部类中的方法访问外部类中变量的示例(转)
2018-10-06 21:23 436lass Day10_11 { public static ... -
java连接ssh到服务器执行命令(免密码)
2018-07-10 09:00 0今天在做不同服务器间,免密码执行curl 命令 Java ... -
于Aviator的规则引擎Demo(转)
2018-05-03 09:26 1816编写不易,转载请注明(http://shihlei.itey ... -
va网络爬虫经验分享(转)
2018-04-20 10:33 570最近三年很少写博客,虽然一直从事IT行业,但更多的是管理工作 ... -
高级Java开发人员最常访问的几个网站(转)
2018-04-19 14:30 298这是高级Java开发人员最常访问的几个网站。 这些网 ... -
趣味算法图解,文科生都看懂了(转)
2018-04-17 17:22 868编者按 IDEA 是由 Sándor ... -
Java Security:公钥私钥、数字签名、消息摘要是什么 (转)
2018-04-13 10:10 414https://www.cnblogs.com/f119436 ... -
一文了解十大 Java 开发者必备测试框架!(转)
2018-04-10 13:55 361想要提升自己的自动化测试技能吗?本文将介绍10个优秀的 Ja ... -
深入理解 Java 多线程核心知识:跳槽面试必备(转)
2018-04-02 13:43 320多线程相对于其他 Java 知识点来讲,有一定的学习门槛,并 ... -
11大Java开源中文分词器的使用方法和分词效果对比(转)
2018-03-19 15:37 542原文出处: 杨尚川 本文的目标有两个: 1、学会使用1 ... -
远程debug代码(转)
2018-03-16 16:45 1012参考:http://blog.csdn.net/su ... -
微服务架构初探(转)
2018-03-16 16:39 630什么是微服务 ... -
你真的理解了MVC, MVP, MVVM吗?(转)
2018-03-15 15:26 539前言: 准备写这篇文章的时候 , 我自认为对MVC已经有深刻 ... -
JAR(Spring Boot)应用的后台运行配置(转)
2018-03-09 07:04 1106酱油一篇,整理一下关于Spring Boot后台运行的一些配 ... -
一位阿里架构师在2018年给每个程序员的小建议(转)
2018-03-01 15:54 567一位阿里架构师在2018年给每个程序员的小建议 1 ... -
Java 9 新特性,看这里就明白了(转)
2018-02-28 14:54 5581、Java9 新特性之---目 ...
相关推荐
在Java开发中,当面临大批量数据导出到Excel...通过这些方法,我们可以在处理大量数据导出到Excel时避免内存溢出问题,同时保持程序的稳定性和效率。在实际应用中,可以根据具体需求和环境选择合适的方法进行组合使用。
通过使用EasyExcel,我们不仅解决了处理大量Excel数据时可能出现的内存溢出问题,还大大提高了数据处理的速度。对于104万行20列的大规模Excel文件,EasyExcel能够在70秒内完成处理,极大地提高了工作效率。未来,...
不过要注意,增加内存分配可能会导致更长的GC停顿时间,所以需权衡性能与内存使用。 5. **流式写入**:如果需要创建大量数据的Excel文件,使用SXSSF可以实现流式写入,避免一次性加载所有数据到内存。这种方式在...
- **大量数据加载**:如Excel导出或大范围数据查询可能导致一次性加载过多数据,超过内存容量。 - **死循环和死递归**:这些情况可能导致程序无法正常结束,占用内存不断增长。 - **JVM内存设置不合理**:初始化...
"Memory Analyzer"是一款专门针对Java应用程序的内存分析工具,它能够帮助开发者深入理解内存使用情况,定位内存泄漏问题,从而提高应用的性能和稳定性。在本文中,我们将详细探讨Memory Analyzer的功能、使用方法...
2. 内存分析:监控JVM的内存使用,包括堆内存(Heap)、非堆内存(Non-Heap)等,有助于识别内存泄漏或内存不足的情况。 3. 磁盘I/O:分析磁盘读写速度,如果发现高延迟或I/O瓶颈,可能需要优化数据库查询、增加缓存...
jProfiler是一款强大的Java应用性能分析与内存诊断工具,它能够帮助开发者在开发阶段以及生产环境中快速定位性能瓶颈,并进行细致的调优工作。通过深入分析堆内存使用情况、CPU负载、垃圾回收等关键指标,jProfiler...
- 分析这些指标有助于评估JVM的性能状态以及是否存在内存泄漏等问题。 #### 三、AWR收集 **AWR(Automatic Workload Repository)**是Oracle数据库内置的一种性能监控机制,用于收集数据库工作负载信息,并通过这些...
在这个场景中,描述中提到的问题可能是由于生成的Freemarker Word文档在应用程序端无法正常打开,而使用Jacob可以提供一种解决方案。 Freemarker是一个强大的模板引擎,常用于生成动态内容,包括Word文档。然而,...
- **查看内存使用情况**:定期检查Tomcat的内存使用情况,以避免内存泄露等问题。 - **解决静态化乱码问题**:在Linux环境下,确保静态资源的编码正确无误。 通过综合运用这些技术和策略,可以显著提高Tomcat服务器...
7. **数据处理**:Java集合框架(如ArrayList、LinkedList、HashMap等)和流API为处理大量数据提供了高效的方法,此外,Apache POI库可以用来读写Excel文件,进行数据导入导出。 8. **版本控制**:Java项目通常使用...
酒店管理系统的开发旨在解决传统管理方式存在的诸多问题,如手工记录易出错、数据统计耗时费力等,通过自动化处理来简化工作流程,降低运营成本,同时提高客户满意度。 #### 二、项目概述 ##### 2.1 开发概述 本...
修改XP风格支持库,解决GDI资源泄露,以及在使用通用组件库六时组合框标题出现重影的BUG。 5. 修改扩展界面支持库一,解决树形框项目无法通过鼠标点击进入编辑状态的BUG。 6. 修改高级表格支持库,解决插入行/...
- **健壮性**:Java设计时考虑到了安全性和健壮性,比如自动内存管理机制避免了常见的内存泄漏问题。 - **安全性**:Java提供了严格的访问控制机制,如沙箱模型,使得运行时可以检测并阻止非法行为。 - **可移植性**...
- **定义**: 数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。 - **措施**: - 授权机制。 - 加密技术。 - 审计跟踪。 ### 计算机的热启动 - **操作**: 在工作状态下,可以通过...
word、 excel等运行在木机上的应用就属」桌面应用。 2:企业级应用 先解释一下企业级应用:简单的说是大规模的应用,一般使用人数较多,数据量较大, 对系统的稳定性、安全性、可扩展性和可装配性等都有比较高的要求 这是...