Если на объект ссылаются как на то, он автоматически освобождает память в j2me или нет освобождает память в j2me? - PullRequest
1 голос
/ 05 августа 2011

Я разработчик j2me. Сейчас я занимаюсь разработкой мобильного приложения с использованием j2me. У меня были сомнения,

В Java, если создать объект, то через некоторое время мы не хотим, чтобы он имел в виду, мы делаем его пустым, тогда он автоматически освобождает память и переходит на сборку мусора.

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

Приведенный выше код str1=null освобождает память. Я сомневаюсь, что если мы ссылаемся на какой-либо объект с нулевым значением, то он идет на сборку мусора (освобождает память) в j2me, правильно или нет.

Пожалуйста, помогите мне. Ответ очень полезен для меня. Потому что у меня была проблема с ограничениями памяти в моем мобильном приложении.

Спасибо и С уважением

Ответы [ 3 ]

2 голосов
/ 05 августа 2011

Да, если все ссылки на объект исчезают, он становится пригодным для сборки мусора, и память для него со временем будет освобождена.В общем случае это произойдет не сразу, а через некоторое время в фоновом потоке или когда программе грозит нехватка памяти.Это верно и для J2ME.

В J2ME вам нужно позаботиться (даже в большей степени, чем в целом), чтобы сохранить память на конце распределения, т.е. не создавать огромное количество объектов в первую очередь.если этого можно избежать.

PS:

String str1 = new String("Thamilan")

записывается лучше (и использует больше памяти, чем)

String str1 = "Thamilan";
1 голос
/ 05 августа 2011
String str1=new String("Thamilan");  //Allocating a memory for str1
.......
......
str1=null;     //Frees the  memory of str1

Если все ссылки исчезнут, память в конечном итоге будет освобождена.Но имейте в виду, что написание такого рода кода в стеке (то есть локальных переменных, внутри методов) не дает никаких преимуществ;компилятор может сделать вывод, что на переменную нельзя ссылаться после некоторой точки, поэтому явное задание значения null никак не влияет;назначение, вероятно, будет сразу же оптимизировано.

Для кучи (то есть переменных экземпляра, внутри классов) этот вид null ing может быть полезным, однако.Компилятор или JVM не могут узнать, собирается ли кто-либо ссылаться на эту переменную в будущем, возможно, с помощью отражения, поэтому он должен держать объект вокруг, если его ссылка не равна null 'd.

0 голосов
/ 17 августа 2011

Лучше позвонить System.gc();, чтобы вызвать сборщик мусора.

...