Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Java > Memory Leak in a multi threaded java application (ImageIcon)

Reply
Thread Tools

Memory Leak in a multi threaded java application (ImageIcon)

 
 
cakmak
Guest
Posts: n/a
 
      01-10-2007
When I profile my swing application with netbeans 5.5 , I notice that
after each periodically tidy up my image container (add,remove
IconImage objects to a hashmap or arraylist), there gather by and by
surviving objects. This leads to run out of memory after a while. Is
there any other way to avoid this effect? Any ideas about "The JVM is
notorious for caching images." I stripped-down my code, this also
gathers surviving objects. An application containing this code could
not live long.



public class LeakCheck {
private int counter=0;
private final String randomquery = "SELECT TOP 4 T00801PersonNr AS
PersonNr,T00801PersonID AS PersonID, T00801Nachname AS
Nachname,T00801Vorname AS Vorname FROM DBA.T00801Person ORDER BY
RAND()";

private class Person extends Object {
private javax.swing.ImageIcon icon;
private String number;
protected void finalize() throws Throwable {
if(icon!=null){
icon.getImage().flush();
icon = null;
}
super.finalize();
}
}
private ArrayList<Person> personList = new ArrayList<Person>();

protected class RefreshTask extends TimerTask {
@Override
public void run() {
random();
}
}
public void go(){
Timer updateTimer = new Timer("Refresh Task");
updateTimer.schedule(new RefreshTask(),0,2000);
}
private Image LoadImageFromDB(String personnr){
Image img = null;
String filename = personnr + ".jpg";
Connection con = getEtrainerDBConnection();
Statement stmt;
ResultSet rs;
try {
stmt = con.createStatement();
String query = Resources.getProperty("selectPersonImage");
query = String.format(query, filename);
rs=stmt.executeQuery(query);
if(rs.next()){
int len=rs.getInt(2);
byte [] b=new byte[len];
InputStream in = rs.getBinaryStream(3);
try {
in.read(b);
in.close();
img=Toolkit.getDefaultToolkit().createImage(b);
} catch (IOException e) {
e.printStackTrace();
}
}
rs.close();
stmt.close();

} catch (SQLException e) {
e.printStackTrace();
}
return img;
}
public void random(){
java.sql.Connection con = getSybaseDBConnection();
try {
if(con!=null && !con.isClosed()){
java.sql.Statement stmt=null;
try {
stmt = con.createStatement();
java.sql.ResultSet rs =
stmt.executeQuery(randomquery);
while(rs.next()){
Person person = new Person();
person.number = rs.getString("PersonNr");
Image img = LoadImageFromDB(person.number);
if(img !=null){
ImageIcon ico = new ImageIcon(img);
person.icon = ico;
}
personList.add(person);
System.out.println("Container size: " +
personList.size());
counter++;
}
if(counter%20 == 0){
personList.clear();
System.gc();//no need, but I force
System.out.println("size: " +
personList.size());
}
rs.close();
stmt.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
LeakCheck leakCheck = new LeakCheck();
leakCheck.go();
}
}

 
Reply With Quote
 
 
 
 
Andrew Thompson
Guest
Posts: n/a
 
      01-10-2007
cakmak wrote:
...
> ..Any ideas about "The JVM is
> notorious for caching images."


Note: This post is the continuation of a thread
on c.l.j.g. that failed to reveal the underlying
problem. Further details can be seen on the
thread beginning with this post..
<http://groups.google.com/groups?selm=(E-Mail Removed) ooglegroups.com>

Andrew T.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
multi-threaded access to shared memory space Greg Willits Ruby 5 07-01-2008 02:19 PM
memory leak in threaded getpwuid_r() usage knt C Programming 2 01-15-2006 04:01 PM
[slightly OT] C++ Multi-threaded shared memory library Alfonso Morra C++ 3 07-20-2005 11:46 AM
multi-threaded, multi-process producer/consumer example? ian douglas C Programming 2 07-30-2004 04:54 AM
Why do Java offers two different ways to write the multi-threaded Java programs? Rodney Edmondson Java 11 12-09-2003 03:46 AM



Advertisments