我最近编程时 碰到了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的There is no Action mapped for action name ...
- j2ee项目中加入android 包能不能调用它的api?从而读取手机的信息?
- 请教Date转换
- hibernate问题
- 是这样的!我现在的项目需要一个是后台的web,拥有几个前台的web(前台的web有可能全部都一样),然后我后台web需要和各个前台的web进行通信,主要是后台web发信息给前台web,但是这个通信的要求比较高,需要即时,而且每个web都需要根据后台web发
- 兼职招聘
- ACTIVE DIRECTORY 的配置问题
- WEBLOGIC8.1下ORACLE连接池调用的问题,急!!!!
- struts2 class not found
- 高分求以jbuilder开发的struts列子。
- 如何用JAVA阻止WINDOWS XP的任务管理器弹出?
- hql语句执行update操作,数据库里的东西竟然没改掉?
这个条件是一个死循环了,肯定会内存溢出。
这里,如果你的数据条数过大是,容易暴发。
建设下你每次提取数据的条数