-
Bug
-
Resolution: Fixed
-
P4
-
5.0u22, 6, 6u18
-
b03
-
x86
-
windows_xp, windows_7
-
Verified
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();
}
}
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();
}
}
- duplicates
-
JDK-7022845 Access violation in DnD : A thread which uses COM must call CoInitializeEx() or OleInitialize()
-
- Closed
-
- relates to
-
JDK-6411042 AWT Memory Leak
-
- Closed
-