我使用这个简单的代码在java中创建了一个新项目:
public static void main(String[] args)
{
JFrame frame;
frame = new JFrame("Empty");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
我注意到移动JFrame会导致进程使用的内存增加。
答案 0 :(得分:3)
查看内存使用量增加并不意味着内存泄漏。程序可能会使用更多内存,因为它必须创建临时对象以进行事件调度或重新绘制。这些临时对象是短暂的,并且在很短的时间内被垃圾收集器移除;所以他们使用的内存再次可用于该程序。
由于内存未返回给操作系统,因此您不会看到过程监控工具; JVM保留它以供将来使用。您可以使用VisualVM之类的工具来监控程序的实际内存使用情况。
有没有更好的方法来简单地显示JFrame?
您发布的代码实际上是不正确的;您不应该从程序的主线程创建和操作GUI对象。以下是显示JFrame
from the Java Tutorial的正确示例:
import javax.swing.*;
public class HelloWorldSwing {
/**
* 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("HelloWorldSwing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Add the ubiquitous "Hello World" label.
JLabel label = new JLabel("Hello World");
frame.getContentPane().add(label);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}