右键选择jtable的一行,弹出一个jdialog显示详细内容。
刚开始都正常,可是当我选择弹出7、8次就很慢,有时候等半天出现java.lang.OutOfMemoryError!不是说java是自动回收内存的么,我关掉jdialog不是就行了么,为什么会有时候慢,有时候快!求助各位高手!

解决方案 »

  1.   

    java的垃圾回收是个低优先级的进程,并不能实时的进行回收看看你的程序,对于大数据量的存取,使用完毕最好显式的释放一下,比如close或null
      

  2.   

    楼上的说得好像是正确的,可是我null了几个变量,好像效果不明显,有没有什么好的方法。
    顺便问个一下,是不是代码中少定义一些变量,用的时候尽量用一个变量来实例化好,要是这样我以后就要注意了!
      

  3.   

    找到问题了:我把jlabel和jcombox封装成了一个jlabelcombox类,把jlabel和jtextfield封装成了一个jlabeltextfield类,怎么在jlabelcombox和jlabeltextfield中监听combox和textfield的mouseclick和keypress?小弟水平很底,描述都不出来,希望大家能帮忙!
      

  4.   

    我描述不清楚,就是自己写了一个jLabelComboBox类,继承自jPanel,内容是jLabel+jComboBox,怎么做才能实现jLabelComboBox像其他类那样能addXXListener,监听的对象就是jComboBox,大家帮忙了! 
      

  5.   

    首先,设置null和close操作是不同的,如果执行了close操作,那么是否设置null无关紧要
    其次,java中有些资源是必须执行close操作的,例如数据库连接,ResultSet,io等等,否则就会出现outofMemory.
    最后,造成outofmemeory的情况不止是内存泄漏,还有当你读一个大的对象进入内存时,但是它的大小超过了操作系统分配给jvm的最大内存,那么也会出现outofMemory.
    你这种情况典型的就是内存泄漏,查查应用程序是否对有些资源没有执行close操作。
      

  6.   

    会不会是你的dialog每次都是new出来的,然后不要了之后只是setVisible(false),或者hide(),并没有真正释放dialog的资源?这样内存自然会很快被用光的。改作重用dialog,new一次出来之后,以后还用这一个,只不过把需要显示的值换一下就好。
    或者每次用完了释放掉(下策,因为效率低下)。不过释放掉的方法记不太清楚了,好像是dispose()?自己查查吧。
      

  7.   

    感谢楼上三位,尤其是舌头讲的最好,原因是http://community.csdn.net/Expert/topic/4865/4865950.xml?temp=.6374475,请继续关注!
    结贴,给分