1

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

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

感谢和问候

4

3 回答 3

2

是的,如果对一个对象的所有引用都消失了,它就有资格进行垃圾收集,并且最终将释放它的内存。这通常不会立即发生,但稍后会在后台线程中或程序可能会耗尽内存时发生。对于 J2ME 也是如此。

在 J2ME 中您应该注意的(甚至比一般情况下更重要)是在分配端保留内存,即如果可以避免的话,首先不要创建大量对象。

PS:

String str1 = new String("Thamilan")

写成更好(并且使用更多的内存)

String str1 = "Thamilan";
于 2011-08-05T06:43:59.550 回答
1
String str1=new String("Thamilan");  //Allocating a memory for str1
.......
......
str1=null;     //Frees the  memory of str1

如果所有引用都消失了,那么内存最终将被释放。但是请注意,在堆栈中(即局部变量,方法内部)编写这种代码根本没有任何优势。编译器可以推断出在某个时间点后是否无法引用该变量,因此将其显式设置为null没有任何效果;分配可能会立即被优化掉。

不过,对于堆(即实例变量,类内部),这种nulling可能很有用。编译器或 JVM 无法知道将来是否有人会引用该变量,可能是通过反射,所以它必须保留对象,除非它的引用是null'd。

于 2011-08-05T06:51:03.020 回答
0

更好System.gc();地调用垃圾收集。

于 2011-08-17T16:40:59.640 回答