【问题标题】:If the object is referenced as then it is automatically frees the memory in j2me or not frees the memory in j2me?如果对象被引用,那么它会自动释放 j2me 中的内存还是不释放 j2me 中的内存?
【发布时间】:2011-08-05 06:36:16
【问题描述】:

我是一名 j2me 开发人员。现在我正在使用 j2me 开发一个移动应用程序。 我有一个疑问,

在java中,如果a创建了一个对象,那么一段时间后我们不想要它意味着,我们将它设为null,然后它会自动释放内存并进入垃圾回收。

String str1=new String("Thamilan");  //Allocating a memory for str1
  .......
  ......
str1=null;     //Frees the  memory of str1

上面的代码str1=null释放内存,我怀疑如果我们将任何对象引用为null,那么它在j2me中进行垃圾收集(内存释放)是否正确。

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

感谢和问候

【问题讨论】:

    标签: java java-me mobile-application


    【解决方案1】:

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

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

    PS:

    String str1 = new String("Thamilan")
    

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

    String str1 = "Thamilan";
    

    【讨论】:

      【解决方案2】:
      String str1=new String("Thamilan");  //Allocating a memory for str1
      .......
      ......
      str1=null;     //Frees the  memory of str1
      

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

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

      【讨论】:

        【解决方案3】:

        最好调用System.gc(); 来调用垃圾回收。

        【讨论】:

          猜你喜欢
          • 2012-07-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-27
          • 2012-09-24
          • 2022-01-10
          • 1970-01-01
          相关资源
          最近更新 更多