1、定义一个数组:
String[] ay = new String[99999999];
这时运行程序,在windows任务管理器时能看到当前内存占用68M如果不定义这个数组,内存占用32M我把 av = null;写在定义数组后面怎么内存还是占用68M?没有回收怎么才能实现定义这个数组后,内存还是32M?2、对jtree做了个鼠标点击事件,在事件中实例了一些变量,比如map vector等,
怎么对实例的这些变量进行回收?
事件完成之后这些变量是需要根据我点击不同的树点存不同的数据,以后要用的。顺便多问一下,netbeans到底能不能把被保护的自动生成代码段去掉?意思是自动生成,但是可人为修改:直接在代码编译器里修改
String[] ay = new String[99999999];
这时运行程序,在windows任务管理器时能看到当前内存占用68M如果不定义这个数组,内存占用32M我把 av = null;写在定义数组后面怎么内存还是占用68M?没有回收怎么才能实现定义这个数组后,内存还是32M?2、对jtree做了个鼠标点击事件,在事件中实例了一些变量,比如map vector等,
怎么对实例的这些变量进行回收?
事件完成之后这些变量是需要根据我点击不同的树点存不同的数据,以后要用的。顺便多问一下,netbeans到底能不能把被保护的自动生成代码段去掉?意思是自动生成,但是可人为修改:直接在代码编译器里修改
不然还不如去学C++ 用一个 delete一个
这也不能保证。
没有办法, Java除去了C++中的析构。
打个比方你就是jvm,在操作系统层,在你提出内存申请的时候,它尽量满足你的需求,比如你说我要100M,操作系统给了你100M内存,这100M内存记在你的头上,而你拿到这些内存后给对象A分配了10M,给对象B分配了10M.....但是现在对象A说我要释放内存了,此时对象A只是把内存返回给了你,它并没有归还给操作系统,此时操作系统记载着你借了它100M内存不变。只有当操作系统内存是在匮乏的时候它才会想方设法找你归还内存。所以这就很明显了,将变量设成null其实内存还是不见回收
ay = null;这里无法保证立即回收,java的垃圾回收时优先级很低的线程。也就是说只有jvm不干其他事情来或者说内存吃紧了才会清理垃圾。
可以通过扩内存,或更换gc算法的方式(加JVM的参数就可以,查Java Doc.如果一定要执行gc,System.gc();或手工设置为null是没有用处的.唯一见到的通过java能够确保gc执行的,是MBean中或JMX中有这样的任务.楼主可以去看看.最后还是要说,不要那样做,那样带来的问题更加严重.