我最近编程时 碰到了Java内存泄露问题,那位大哥能帮帮我 如何避免这个问题
import java.util.*;
import java.sql.*;
public class OutputArticle{
Set<Article> articles = new HashSet<Article>();
public OutputArticle(){
Connection conn = DB.getConn();
tree(articles,conn,0);
for(Iterator<Article> it = articles.iterator();it.hasNext();){
Article b = it.next();
System.out.println(b.getTitle());
}
DB.close(conn);
}
public static void main(String[] args){
new OutputArticle();
}
private void tree(Set<Article> articles,Connection conn,int id){
String sql = "select * from article where pid="+id;
Statement stmt = DB.getStmt(conn);
ResultSet rs = DB.getResultSet(stmt,sql);
try{
while(rs.next()){
Article a = new Article();
a.setId(rs.getInt("id"));
a.setPid(rs.getInt("pid"));
a.setRootid(rs.getInt("rootid"));
a.setTitle(rs.getString("title"));
a.setPdate(rs.getTimestamp("pdate"));
a.setIsleaf(rs.getInt("isleaf")==0?true:false);
articles.add(a);
a=null;
while(rs.getInt("isleaf")==1){
tree(articles,conn,rs.getInt("id"));
}
}
}catch(SQLException e){
e.printStackTrace();
}finally{
try{
if(stmt!=null){
stmt.close();
stmt=null;
}
if(rs!=null){
rs.close();
rs=null;
}
}catch(Exception e1){
e1.printStackTrace();
}
}
}
}运行时抛出的如下异常:
D:\jwork\li>javac OutputArticle.java
D:\jwork\li>java OutputArticle
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.HashMap.resize(Unknown Source)
at java.util.HashMap.addEntry(Unknown Source)
at java.util.HashMap.put(Unknown Source)
at java.util.HashSet.add(Unknown Source)
at OutputArticle.tree(OutputArticle.java:30)
at OutputArticle.tree(OutputArticle.java:33)
at OutputArticle.tree(OutputArticle.java:33)
at OutputArticle.tree(OutputArticle.java:33)
at OutputArticle.<init>(OutputArticle.java:7)
at OutputArticle.main(OutputArticle.java:15)
import java.util.*;
import java.sql.*;
public class OutputArticle{
Set<Article> articles = new HashSet<Article>();
public OutputArticle(){
Connection conn = DB.getConn();
tree(articles,conn,0);
for(Iterator<Article> it = articles.iterator();it.hasNext();){
Article b = it.next();
System.out.println(b.getTitle());
}
DB.close(conn);
}
public static void main(String[] args){
new OutputArticle();
}
private void tree(Set<Article> articles,Connection conn,int id){
String sql = "select * from article where pid="+id;
Statement stmt = DB.getStmt(conn);
ResultSet rs = DB.getResultSet(stmt,sql);
try{
while(rs.next()){
Article a = new Article();
a.setId(rs.getInt("id"));
a.setPid(rs.getInt("pid"));
a.setRootid(rs.getInt("rootid"));
a.setTitle(rs.getString("title"));
a.setPdate(rs.getTimestamp("pdate"));
a.setIsleaf(rs.getInt("isleaf")==0?true:false);
articles.add(a);
a=null;
while(rs.getInt("isleaf")==1){
tree(articles,conn,rs.getInt("id"));
}
}
}catch(SQLException e){
e.printStackTrace();
}finally{
try{
if(stmt!=null){
stmt.close();
stmt=null;
}
if(rs!=null){
rs.close();
rs=null;
}
}catch(Exception e1){
e1.printStackTrace();
}
}
}
}运行时抛出的如下异常:
D:\jwork\li>javac OutputArticle.java
D:\jwork\li>java OutputArticle
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.HashMap.resize(Unknown Source)
at java.util.HashMap.addEntry(Unknown Source)
at java.util.HashMap.put(Unknown Source)
at java.util.HashSet.add(Unknown Source)
at OutputArticle.tree(OutputArticle.java:30)
at OutputArticle.tree(OutputArticle.java:33)
at OutputArticle.tree(OutputArticle.java:33)
at OutputArticle.tree(OutputArticle.java:33)
at OutputArticle.<init>(OutputArticle.java:7)
at OutputArticle.main(OutputArticle.java:15)
解决方案 »
- 没办法,准备转测试,请各位指点
- Struts2中的tree标签问题
- final修饰符
- 这样结构的数据,怎么从 Action 里传到 页面的?
- Hibernate中session.delete(String,Object);两个参数是什么意思?
- 提交表单后,怎样得到<html:select>中被选中的项?
- Tomcat用户登录问题(admin)?
- CachedRowSet NullPointerException in Linux
- o/r mapping和jdo有不同吗?
- 请教jb7+WebShere高手,,,,,,急急,,在线等待
- 如何用JAVA阻止WINDOWS XP的任务管理器弹出?
- hql语句执行update操作,数据库里的东西竟然没改掉?
这个条件是一个死循环了,肯定会内存溢出。
这里,如果你的数据条数过大是,容易暴发。
建设下你每次提取数据的条数