我是一名j2me开发人员。现在我使用j2me开发移动应用程序。 我有一个疑问,
在java中,如果创建一个对象,那么经过一段时间后我们不希望它意味着,我们将其设为null,然后它会自动释放内存并转到垃圾收集。
String str1=new String("Thamilan"); //Allocating a memory for str1
.......
......
str1=null; //Frees the memory of str1
上面的代码str1=null
释放了内存,我怀疑的是,如果我们将任何对象引用为null,那么它在j2me中的垃圾收集(内存释放)是否正确。
请帮帮我。答案对我很有帮助。因为我的移动应用程序存在内存限制问题。
谢谢&此致
答案 0 :(得分:2)
是的,如果对某个对象的所有引用都消失了,它就有资格进行垃圾回收,最终将释放它的内存。这通常不会立即发生,但稍后会在后台线程中或程序可能耗尽内存时发生。对于J2ME也是如此。
你应该在J2ME中处理什么(比一般情况更重要)是在分配端保留内存,即如果可以避免的话,首先不要创建大量的对象。
PS:
String str1 = new String("Thamilan")
更好地编写为(并使用更多内存)
String str1 = "Thamilan";
答案 1 :(得分:1)
String str1=new String("Thamilan"); //Allocating a memory for str1
.......
......
str1=null; //Frees the memory of str1
如果所有引用都消失了,那么最终将释放内存。但要注意在堆栈中编写这种代码(即局部变量,内部方法)根本没有任何优势;编译器可以推断某个点之后是否无法引用该变量,因此将其明确设置为null
无效;任务可能会立即优化掉。
对于堆(即实例变量,内部类),这种null
ing 可能有用。编译器或JVM无法知道将来是否会引用该变量,可能是通过反射,因此它必须保留对象,除非它的引用是null
'd。
答案 2 :(得分:0)
最好调用System.gc();
来调用垃圾收集。