JFrame对象在运行时,是谁在引用它才不至于被当作垃圾回收

yylzq 2008-05-30 07:35:11
按照垃圾回收的工作机制,当不存在对某对象的任何引用时,该对象就被认为没有存在的必要了,它占用的内存将被释放。但在下面的例子中:
public class testFrame extends JFrame{
public testFrame(String text){
super(text);
this.pack();
this.setVisible(true);
}
}
public class test{
public static void main(String[] args) {
new testFrame("test");
}
}
在这个例子中,并没有明确指定那个变量指向这个testFrame对象,但他确实是不会被回收的,这是怎么回事呀?是不是默认有变量指向它?
多谢指教
...全文
102 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
kuyesuifeng 2008-05-30
  • 打赏
  • 举报
回复
java中只要有关于图形用户界面的组件在运行,那么它就必然同时启动一个事件线程来监测这些组件,这些组件就是被JVM自动启动的事件线程引用着
sagezk 2008-05-30
  • 打赏
  • 举报
回复
Frame没被回收是因为被内部运行着的线程引用着。另外可以用 JDK安装目录\bin\jconsole.exe 来监控和查看Java程序内部工作线程的运行信息。
sagezk 2008-05-30
  • 打赏
  • 举报
回复
当main线程通过new testFrame("test");调用setVisible(true);后,在窗体内部会启动一个处理窗体事件包括完成窗体图形绘制的非守护线程,而Java应用程序中只要有一个非守护线程还在运行,程序就不会退出,只有当程序内所有处于可运行状态的线程都为守护线程时程序才会退出,这也是带图形用户界面的程序一般使用System.exit(0);退出的原因。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧