<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=117887&amp;view=findpost&amp;p=890429</guid>
        <pubDate>Wed, 19 Oct 2005 12:37:58 +0000</pubDate>
        <title>J2ME сборщик мусора</title>
        <link>https://forum.sources.ru/index.php?showtopic=117887&amp;view=findpost&amp;p=890429</link>
        <description><![CDATA[the_Shadow: Угу... Дело в том, что с Java2ME лучше так не шутить... Проще и, на мой взгляд, умнее, было бы <em class='tag-i'>самому</em> обо всём позаботиться... Этакий... &quot;ассемблерный стиль&quot; программирования на Java. :D:D:D]]></description>
        <author>the_Shadow</author>
        <category>Java</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=117887&amp;view=findpost&amp;p=890416</guid>
        <pubDate>Wed, 19 Oct 2005 12:26:53 +0000</pubDate>
        <title>J2ME сборщик мусора</title>
        <link>https://forum.sources.ru/index.php?showtopic=117887&amp;view=findpost&amp;p=890416</link>
        <description><![CDATA[Lamer George: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=117887&view=findpost&p=890403'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>SVK &#064; <time class="tag-quote__quoted-time" datetime="2005-10-19T12:20:43+00:00">19.10.05, 12:20</time></span><div class='quote '>Вот только когда он ещё сработает ;)<br>
Но на то есть void gc();&#33;</div></div><br>
...который тоже еще неизвестно когда сработает  ;)]]></description>
        <author>Lamer George</author>
        <category>Java</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=117887&amp;view=findpost&amp;p=890403</guid>
        <pubDate>Wed, 19 Oct 2005 12:20:43 +0000</pubDate>
        <title>J2ME сборщик мусора</title>
        <link>https://forum.sources.ru/index.php?showtopic=117887&amp;view=findpost&amp;p=890403</link>
        <description><![CDATA[SVK: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=117887&view=findpost&p=890352'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>the_Shadow &#064; <time class="tag-quote__quoted-time" datetime="2005-10-19T11:43:52+00:00">19.10.05, 11:43</time></span><div class='quote '>&quot;Общесистемный&quot; (кхммм...) сборщик мусора может сработать только в случае корректного высвобождения ресурсов самой программой...</div></div><br>
Вот только когда он ещё сработает ;)<br>
Но на то есть <strong class='tag-b'>void gc();</strong>&#33;]]></description>
        <author>SVK</author>
        <category>Java</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=117887&amp;view=findpost&amp;p=890352</guid>
        <pubDate>Wed, 19 Oct 2005 11:43:52 +0000</pubDate>
        <title>J2ME сборщик мусора</title>
        <link>https://forum.sources.ru/index.php?showtopic=117887&amp;view=findpost&amp;p=890352</link>
        <description><![CDATA[the_Shadow: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>А вообще, если не ошибаюсь, объект удаляется тогда, когда на него не остается ссылок ни в одном из запущенных потоков программы.</div></div><br>
По-моему, да... Причём, доступа к &quot;счётчику&quot; извне не существует, если не ошибаюсь. Прога сама должна подчищать за собой.<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><br>
1. всегда очищать все глобальные ссылки в экземплярах классов (метод destroy). Только глобальные, так как объекты, которые созданые только в методе - память за ними будет очищена после работы метода. Очищать нужно в том числе и int a; =&gt; a=null; иначе память все равно останется не доступной<br>
</div></div><br>
По поводу #1. Этот вариант более легко реализуемый. Более, скажем так, стандартный и, по этой причине, более предпочтительный. Мы же в Java2ME, а всех возможностей Java здесь крайне сложно реализовать. По этой причине, программирование здесь требует большей щепетильности. :D:D:D<br>
<br>
Программе <em class='tag-i'>самой</em> приходится отслеживать состояние её составляющих на уровне внутренней организации программы. Как правило, доступ к составляющим программы извне в Java2ME либо затруднён, либо невозможен.<br>
<br>
&quot;Общесистемный&quot; (кхммм...) сборщик мусора может сработать только в случае корректного высвобождения ресурсов самой программой, т.к. у него функционал дохленький. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2005-10-19T11:46:27+00:00">19.10.05, 11:46</time></span></span><br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>А вот насчет firstObj - не знаю. Кто-нибудь может подсказать?</div></div><br>
Хммм... Проверить бы надо, но, по-моему, в зависимости от &quot;профиля MIDP&quot;. В версии 1.0, весьма возможно, останется неубранным. В версии 2.0 -- должен быть убранным. <br>
<br>
Хотя, я и не утверждаю этого однозначно, но, в принципе, можно проверить... <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2005-10-19T11:52:11+00:00">19.10.05, 11:52</time></span></span><br>
Бррррр... По ходу дела, действительно, не хило было бы по-тестировать в разных &quot;окружениях&quot;...]]></description>
        <author>the_Shadow</author>
        <category>Java</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=117887&amp;view=findpost&amp;p=884378</guid>
        <pubDate>Thu, 13 Oct 2005 13:01:24 +0000</pubDate>
        <title>J2ME сборщик мусора</title>
        <link>https://forum.sources.ru/index.php?showtopic=117887&amp;view=findpost&amp;p=884378</link>
        <description><![CDATA[bit_immo: в общем ладно - накидал я тест для проверки :)<br>Если запустить так - то будет все нормально вечный цикл будет постоянно заполнять вектор.<br>Но если закоментировать метод destroy - то произойдет Out Of Memory.<br><br>      if (i == 18000) { - 18000 возможно прийдеться подобрать вручную (это на моем эмуле хватило столько записей - чтобы заполнить память, возможно на других будет heap меньше)<br><br>Следовательно - можно пойти двумя дорогами:<br>1. всегда очищать все глобальные ссылки в экземплярах классов (метод destroy). Только глобальные, так как объекты, которые созданые только в методе - память за ними будет очищена после работы метода. Очищать нужно в том числе и int a; =&gt; a=null; иначе память все равно останется не доступной<br>2. принять правило - всегда обнулять ненужные ссылки.<br><br>ИМХО - 2 ой вариант более геморный - так как запаришся всегда за собой убирать :)))<br><br>в связи с этим вопрос: действительно ли мусорщик убирает всегда (если ссылки на объект не глобальные) после отработки метода или это может происходить не всегда - и нужно всетаки принудильно обнулять ссылки локальные в методе.<br><br>?????<br><br><br><br><br>import javax.microedition.midlet.MIDlet;<br>import javax.microedition.lcdui.*;<br>import java.util.Vector;<br><br>public class Test2<br>    extends MIDlet {<br><br>  private static Vector v = new Vector();<br><br>  public void startApp() {<br>    Form form = new Form(&quot;Test&quot;);<br>    Display.getDisplay(this).setCurrent(form);<br><br>    System.out.println(&quot;Total memory: &quot; + Runtime.getRuntime().totalMemory());<br>    System.out.println(&quot;Free memory: &quot; + Runtime.getRuntime().freeMemory());<br>    Test3 test3 = new Test3();<br>    System.out.println(&quot;Total memory: &quot; + Runtime.getRuntime().totalMemory());<br>    System.out.println(&quot;Free memory: &quot; + Runtime.getRuntime().freeMemory());<br><br>    test3.destroy();<br>    test3 = null;<br><br>    while (true) {<br>      test();<br>      System.out.println(&quot;Total memory: &quot; + Runtime.getRuntime().totalMemory());<br>      System.out.println(&quot;Free memory: &quot; + Runtime.getRuntime().freeMemory());<br>    }<br>  }<br><br>  public void pauseApp() {<br><br>  }<br><br>  public void destroyApp(boolean destroy) {<br>  }<br><br>  public void test() {<br>    Vector v = new Vector();<br>    int i = 0;<br>    while (true) {<br>      if (i == 18000) {<br>        break;<br>      }<br>      v.addElement(new Integer(i));<br>      i++;<br>    }<br>  }<br>}<br><br><br><br><br>import java.util.Vector;<br><br>public class Test3 {<br>  private static Vector v = new Vector();<br><br>  public Test3() {<br>    test();<br>  }<br><br>  public void test() {<br>    int i = 0;<br>    while (true) {<br>      if (i == 18000) {<br>        break;<br>      }<br>      v.addElement(new Integer(i));<br>      i++;<br>    }<br>  }<br><br>  public void destroy() {<br>    v = null;<br>  }<br>}]]></description>
        <author>bit_immo</author>
        <category>Java</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=117887&amp;view=findpost&amp;p=883837</guid>
        <pubDate>Thu, 13 Oct 2005 05:59:44 +0000</pubDate>
        <title>J2ME сборщик мусора</title>
        <link>https://forum.sources.ru/index.php?showtopic=117887&amp;view=findpost&amp;p=883837</link>
        <description><![CDATA[Lamer George: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=117887&view=findpost&p=883800'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>bit_immo &#064; <time class="tag-quote__quoted-time" datetime="2005-10-13T05:17:52+00:00">13.10.05, 05:17</time></span><div class='quote '>и, если в методе мы создали объект - после выполнения метода - ссылки на объекты в методе тоже не нужно обнулять (сборщик сам убирает)?</div></div><br>
Именно так. <br>
<br>
Вообще, я и сам не знаю механизма сборки мусора. Вот, например, есть такой код:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">class ClassOne</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;private ClassTwo secondObj = new ClassTwo();</div><div class="code_line">&nbsp;&nbsp;public void changeArray(ArrayList al)</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;al.add(secondObj);</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">public class MainClass</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;public static void main(String args)</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;ArrayList list = new ArrayList();</div><div class="code_line">&nbsp;&nbsp; &nbsp;ClassOne firstObj = new ClassOne();</div><div class="code_line">&nbsp;&nbsp; &nbsp;firstObj.changeArray(list);</div><div class="code_line">&nbsp;&nbsp; &nbsp;....</div><div class="code_line">&nbsp;&nbsp; &nbsp;// в остальном коде нет ссылок на firstObj, </div><div class="code_line">&nbsp;&nbsp; &nbsp;// но есть ссылки на list </div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Думаю, в таком варианте secondObj останется неубранным. А вот насчет firstObj - не знаю. Кто-нибудь может подсказать?]]></description>
        <author>Lamer George</author>
        <category>Java</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=117887&amp;view=findpost&amp;p=883800</guid>
        <pubDate>Thu, 13 Oct 2005 05:17:52 +0000</pubDate>
        <title>J2ME сборщик мусора</title>
        <link>https://forum.sources.ru/index.php?showtopic=117887&amp;view=findpost&amp;p=883800</link>
        <description><![CDATA[bit_immo: и, если в методе мы создали объект - после выполнения метода - ссылки на объекты в методе тоже не нужно обнулять (сборщик сам убирает)?]]></description>
        <author>bit_immo</author>
        <category>Java</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=117887&amp;view=findpost&amp;p=883240</guid>
        <pubDate>Wed, 12 Oct 2005 11:30:23 +0000</pubDate>
        <title>J2ME сборщик мусора</title>
        <link>https://forum.sources.ru/index.php?showtopic=117887&amp;view=findpost&amp;p=883240</link>
        <description><![CDATA[Lamer George: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=117887&view=findpost&p=883224'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>bit_immo &#064; <time class="tag-quote__quoted-time" datetime="2005-10-12T11:15:49+00:00">12.10.05, 11:15</time></span><div class='quote '>Или все же достаточно сделать instance=null;</div></div><br>
Достаточно, если у тебя нигде не осталось прямых линков на внутренние объекты. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2005-10-12T11:32:10+00:00">12.10.05, 11:32</time></span></span><br>
А вообще, если не ошибаюсь, объект удаляется тогда, когда на него не остается ссылок ни в одном из запущенных потоков программы.]]></description>
        <author>Lamer George</author>
        <category>Java</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=117887&amp;view=findpost&amp;p=883224</guid>
        <pubDate>Wed, 12 Oct 2005 11:15:49 +0000</pubDate>
        <title>J2ME сборщик мусора</title>
        <link>https://forum.sources.ru/index.php?showtopic=117887&amp;view=findpost&amp;p=883224</link>
        <description><![CDATA[bit_immo: Народ, не подскажите ссылки про сборщик мусора почитать. Желательно на русском.<br><br>а вопрос во какой - если мы создаем экземпляр класса, в котором есть еще объекты, а потом делаем ссылку на этот экземпляр равнуюю null - то сборщик полностью очищает память или нужно принудительно еще обнулять ссылку на внутренние объекты?<br><br>Или все же достаточно сделать instance=null;<br>?]]></description>
        <author>bit_immo</author>
        <category>Java</category>
      </item>
	
      </channel>
      </rss>
	