Hi,
  I wrote this sample code and the resident memory of the process is increasing gradually over time. What could be the reason ? I don't see any obvious leaks in my program. Could it be that the API is not freeing/deleting memory ?

Regards,
Navin



package ovcollector;



import java.util.*;
import java.io.*;
import java.lang.management.ManagementFactory;

import org.apache.http.client.*;
import org.apache.http.params.*;
import org.ovirt.engine.sdk.Api;
import org.apache.http.pool.*;
import org.ovirt.engine.sdk.decorators.Host;
import org.ovirt.engine.sdk.decorators.HostStatistic;
import org.ovirt.engine.sdk.decorators.StorageDomain;
import org.ovirt.engine.sdk.decorators.VM;
import org.ovirt.engine.sdk.decorators.VMDisk;
import org.ovirt.engine.sdk.decorators.VMDiskStatistic;
import org.ovirt.engine.sdk.decorators.VMStatistic;
import org.ovirt.engine.sdk.decorators.VMs;
import org.ovirt.engine.sdk.entities.CPU;
import org.ovirt.engine.sdk.entities.Value;
import org.ovirt.engine.sdk.exceptions.ServerException;
import org.ovirt.engine.sdk.exceptions.UnsecuredConnectionAttemptError;
import org.ovirt.engine.*;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;


public class collectHosts extends JPanel {

/**
* @param args
*/
public static String[] columnNames = {"Host Name",
           "Host uuid",
           "Cpu Cores", "Cpu Sockets",
           "Memory.total",
           "Memory.used",
           "Memory.free",
           "Memory.shared","Memory.buffers","Memory.cached","swap.total","swap.free","swap.used","swap.cached","ksm.cpu.current",
           "cpu.current.user","cpu.current.system","cpu.current.idle","cpu.load.avg.5m"
           };

public static Object[][] data = 
{
{"blankvmname", "blankuuid", new Double(0),new Double(0),new Double(0),new Double(0),new Double(0),new Double(0),new Double(0), new Double(0),
new Double(0),new Double(0),new Double(0),new Double(0),new Double(0),new Double(0),new Double(0),new Double(0),new Double(0)},
{"blankvmname", "blankuuid", new Double(0),new Double(0),new Double(0),new Double(0),new Double(0),new Double(0),new Double(0), new Double(0),
new Double(0),new Double(0),new Double(0),new Double(0),new Double(0),new Double(0),new Double(0),new Double(0),new Double(0)}
};
public collectHosts() {
       super(new GridLayout(1,0));
 
       
 
       final JTable table = new JTable(data, columnNames);
       table.setPreferredScrollableViewportSize(new Dimension(500, 70));
       table.setFillsViewportHeight(true);
 
 
       //Create the scroll pane and add the table to it.
       JScrollPane scrollPane = new JScrollPane(table);
 
       //Add the scroll pane to this panel.
       add(scrollPane);
   }
 

 /**
    * Create the GUI and show it.  For thread safety,
    * this method should be invoked from the
    * event-dispatching thread.
    */
   private static void createAndShowGUI() {
       //Create and set up the window.
       JFrame frame = new JFrame("Hosts");
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
       //Create and set up the content pane.
       collectHosts newContentPane = new collectHosts();
       newContentPane.setOpaque(true); //content panes must be opaque
       frame.setContentPane(newContentPane);
 
       //Display the window.
       frame.pack();
       frame.setVisible(true);
   }

private static final String URL = "http://somehost:80/api";
public static void main(String[] args) throws ClientProtocolException,ServerException, UnsecuredConnectionAttemptError,IOException {
// TODO Auto-generated method stub
System.out.println("Hosts");

while (true)
{
Api  api = new Api(URL,"SOMEUSERNAME","SOMEPASSWORD");
System.out.println(ManagementFactory.getRuntimeMXBean().getName()) ;
List<Host>  hlist = api.getHosts().list();
Integer i=0,j=0;
for(Host obj: hlist)
{
j=0;
System.out.println(obj.getName()+ ":" + obj.getId() +":"+ obj.getMemory()+":" + obj.getCpu().getTopology().getCores() +":"+
obj.getCpu().getTopology().getSockets());
data[i][j++]=obj.getName();
data[i][j++]=obj.getId();
data[i][j++]=obj.getCpu().getTopology().getCores();
data[i][j++]=obj.getCpu().getTopology().getSockets();
List<HostStatistic> lhs=obj.getStatistics().list();
for(HostStatistic obj1: lhs)
{
System.out.println(obj1.getName());
List<Value> vll=obj1.getValues().getValues();
for(Value vl:vll)
{
System.out.println(vl.getDatum());
data[i][j++]=vl.getDatum();
}
}
i++;
}
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
           createAndShowGUI();
       }
});
List<StorageDomain> list_SD=api.getStorageDomains().list();
Integer i=0;
for(StorageDomain obj: list_SD)
{
System.out.println(obj.getName()+ " | " + obj.getUsed() + " | " + obj.getAvailable() + " | " + obj.getType());
}
*/
}
}