如果对象被引用为那么它会自动释放j2me中的内存或者不释放j2me中的内存?

时间:2011-08-05 06:36:17

标签: java java-me mobile-application

我是一名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中的垃圾收集(内存释放)是否正确。

请帮帮我。答案对我很有帮助。因为我的移动应用程序存在内存限制问题。

谢谢&此致

3 个答案:

答案 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();来调用垃圾收集。