会从DB里面得到两个分别100W大小List,List里面都是TxtClass对象!
然后把这个两个List中,TxtClass对象ID属性的相同的项去掉,合并成一个新的LIST,合并后大概150W左右!
然后在遍历合并的List,取出TxtClass对象,根据TxtClass对象内容创建txt文件!最后再将合并的List当做对象
传给其他方法由于100w总是溢出,而由于其他原因内存只能设置128M,
所以不知道下面的怎么修改阿
List sumList=new ArrayList();
for(int i=0;i<10;i++){
//执行sql,获取一个包含10W个TxtClass对象
Sql1 = .....................100000;
List tmpList = 10W个TxtClass对象;
sumList.add(tmpList);
}
for(int i=0;i<10;i++){
//执行sql,获取一个包含10W个TxtClass对象
Sql2 = .....................100000;
List tmpList = 10W个txtClass对象;
sumList.add(tmpList);
}
int sumSize = sumList.size();
StringBuffer _sb = new StringBuffer();
List finalList=new ArrayList();
for(int i=0;i<sumSize;i++){
List tmpList = (List)sumList.get(i);
int tmpSize = tmpList.size();
List finaTmplList=new ArrayList();
for(int j=0;j<sumSize;j++){
TxtClass tmpTxtClass = (TxtClass)tmpList.get(i);
String strId = tmpTxtClass.getId();
_sb.append(strId+",");
if(_sb.toString().indexOf(strId+",")<0){
//如果该ID从来没有存在过则用tmpTxtClass对象内容生成文件
writeFile(tmpTxtClass);
finaTmplList.add(tmpTxtClass);
}
}
finalList.add(finaTmplList);
//最后再将合并的List当做对象传给其他方法
xxxClass.xxxMethod(finalList);
}
然后把这个两个List中,TxtClass对象ID属性的相同的项去掉,合并成一个新的LIST,合并后大概150W左右!
然后在遍历合并的List,取出TxtClass对象,根据TxtClass对象内容创建txt文件!最后再将合并的List当做对象
传给其他方法由于100w总是溢出,而由于其他原因内存只能设置128M,
所以不知道下面的怎么修改阿
List sumList=new ArrayList();
for(int i=0;i<10;i++){
//执行sql,获取一个包含10W个TxtClass对象
Sql1 = .....................100000;
List tmpList = 10W个TxtClass对象;
sumList.add(tmpList);
}
for(int i=0;i<10;i++){
//执行sql,获取一个包含10W个TxtClass对象
Sql2 = .....................100000;
List tmpList = 10W个txtClass对象;
sumList.add(tmpList);
}
int sumSize = sumList.size();
StringBuffer _sb = new StringBuffer();
List finalList=new ArrayList();
for(int i=0;i<sumSize;i++){
List tmpList = (List)sumList.get(i);
int tmpSize = tmpList.size();
List finaTmplList=new ArrayList();
for(int j=0;j<sumSize;j++){
TxtClass tmpTxtClass = (TxtClass)tmpList.get(i);
String strId = tmpTxtClass.getId();
_sb.append(strId+",");
if(_sb.toString().indexOf(strId+",")<0){
//如果该ID从来没有存在过则用tmpTxtClass对象内容生成文件
writeFile(tmpTxtClass);
finaTmplList.add(tmpTxtClass);
}
}
finalList.add(finaTmplList);
//最后再将合并的List当做对象传给其他方法
xxxClass.xxxMethod(finalList);
}
解决方案 »
- Svn的使用问题
- BufferedImageOp这个接口的实现方法
- Myeclipse 中tomcat启动的问题
- JAVA程序;号可以无处不在~~?
- "#$%alkdsjnixocjvlniaofdlanfasodjnvjkcnxjflaksdjf#$%^&".replaceAll(".{3}(.+).{5}", "$1")
- 我写的计算闰年问题(有个编译错误,请大家指点)
- SWING的小问题!麻烦大家了!谢谢
- jsp文件中包含一个applet,如何把applet的运行结果传给jsp文件使用?
- g.drawString(....),怎样设置字体
- 图像赋值???
- 怎样在Jlist中添加图片,我想做成qq 好友列表那个效果
- fileoutputStream.write() 是不是每次输出后都将原来文件的内容冲掉?
要传给其他方法,把数据库条件传给其他方法,或者把数据库结果给其他方法以上只是提示,具体问题具体分析
1.先用sql语句得出唯一ID的List
数据库中不是有Distinct嘛,别在程序中做这个事情。效率慢很多。
List<String> list = SQL 执行结果。就是ID的list2. 循环这个list,取出的每个Id都去查数据库。然后取出里面的TxtClass对象内容写入到文件中。这样做虽然访问数据库的操作多了,但是应该不会出现内存不够的问题了。
2. 经1处理后如果数据量仍然巨大,可以结合分页方法,将查询结果分若干页一页一页获取再分批处理。否则可能影响数据库服务器性能,并导致堆栈溢出。
3. 写文件时可以考虑使用线程池来避免线程频繁创建销毁带来的额外开销,但不要将工作线程配置的太多,否则性能不升反降。多次测试一下,找到一个平衡点。
4. 将JVM的最大可用内存设大点,方法 java -Xmx512m ...,如果是Web应用,则设置相应Web服务器的配置即可。