Duplicate :
|
|
Duplicate :
|
|
Relates :
|
From https://bugs.eclipse.org/bugs/show_bug.cgi?id=127374 : I believe that JFieldText uses OLE somehow (Drag&Drop or clipboard) and relies on paired calls to OleInitialize()/OleUninitialize() to free up memory, but because of the extra calls made by the testcase, the OLE ref count does not go down to zero and memory is leaked. Please could you take a look at this? import java.awt.*; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; import org.eclipse.swt.internal.win32.*; //import org.eclipse.swt.widgets.Display; /** * @author scheglov_ke */ public class PR127374 { /** * @param args */ public static void main(String[] args) throws Exception { //Display display = new Display(); OS.OleInitialize(0); // for (int i = 0; i < 100; i++) { System.out.println(i); JFrame frame = new JFrame(); // JTextField textField = new JTextField(); frame.getContentPane().add(textField, BorderLayout.NORTH); // JLabel label = new JLabel(getBigString()); frame.getContentPane().add(label, BorderLayout.SOUTH); // frame.setVisible(true); frame.setVisible(false); //frame.getContentPane().remove(textField); //un-comment this line to remove leak frame.dispose(); // PR127374.printMemory(); } OS.OleUninitialize(); //display.dispose(); // Thread.sleep(100000); } private static void printMemory() { System.gc(); System.out.println(Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()); } private static String getBigString() { int size = 1024 * 1024; StringBuffer sb = new StringBuffer(size); for (int i = 0; i < size; i++) { sb.append('*'); } return sb.toString(); } }
|