Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Маленький тест, :) 
:(
    Опции темы
TrivialCore
Дата 24.9.2004, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 242
Регистрация: 26.4.2004

Репутация: 2
Всего: 5



Цитата(Domestic @ 24.9.2004, 18:34)
Объекты создаются не на стеке, так ведь ? ч то будет делать сборщик мусора в этой ситуации?
Насколько мне ведомо, все объекты без указателя считаются мусором, так что объекты будут исчезать сразу после появления.

Так ведь? =)

PM MAIL   Вверх
redrick
Дата 24.9.2004, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 547
Регистрация: 7.1.2004
Где: Москва

Репутация: 3
Всего: 5



полистай топик - уже было позожее задание =)

до дома доберусь - тоже поломаю голову =)


--------------------
Имею Мнение Хрен Оспоришь   
PM MAIL ICQ   Вверх
LSD
Дата 24.9.2004, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Нет.
Цитата(JavaDoc)
Any exception thrown by the finalize method causes the finalization of this object to be halted, but is otherwise ignored.



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Domestic Cat
Дата 24.9.2004, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Цитата(LSD @ 24.9.2004, 13:44)
Нет


- это в смысле утечки не будет ? smile.gif



--------------------

PM   Вверх
LSD
Дата 24.9.2004, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Да, в смысле нет smile.gif
Добавлено @ 22:55
Не будет в общем (не должно, или я ничего не понимаю в аглицком) smile.gif


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Domestic Cat
Дата 24.9.2004, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



smile.gif а если проверить ?


--------------------

PM   Вверх
Nobody
Дата 24.9.2004, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 25.8.2003
Где: Россия, Москва

Репутация: 4
Всего: 16



Цитата
After the finalize method has been invoked for an object, no further action is taken until the Java virtual machine has again determined that there is no longer any means by which this object can be accessed by any thread that has not yet died, including possible actions by other objects or classes which are ready to be finalized, at which point the object may be discarded.


Исходя из этого, делаю предположение, что сначала будет выбрасываться исключение, а потом тихо-мирно объект будет удалён.


--------------------
Алгоритм помещения вопросов на форуме
Выражаем спасибо вот ТАК
Use the Source, Luke!
PM MAIL WWW ICQ   Вверх
Domestic Cat
Дата 24.9.2004, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Если запустить с флагом -verbose:gc то будет видно, что тратится около 30 метров, причем
ничего сборщик мусорa толком нe собирает. Если же иксепш убрать - то памяти занято
жалкие 100 кб.
Eсли же пускать с -Xaprof tо можно видеть, чtо на объекты класса Х идет всегo
8,000,000 байт ; но в случае с иксепшном появляется куча других объектов:
Код

________________Size__Instances__Average__Class________________
           32128448    1004014       32  java.lang.ref.Finalizer
           26288496     313084       84  [Ljava.lang.Object;
....


Так что память убегаеt кудa-то smile.gif

Кстати, а чтo если сделать так:
Код

   public void finalize()
   {
       try
       {
           throw new Exception();
       }
       catch (Exception e)
       {}
   }

?


--------------------

PM   Вверх
LSD
Дата 24.9.2004, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Я модифицировал класс:
Код

public class Test
{
 public static void main(String[] args)    
 {
   while(true)
   {
      new X();
   }
 }
}

class X
{  
 private byte[] ballast = new byte[1024];

 public void finalize() throws Exception
 {
   throw new Exception();
 }
}

И запустил: java -Xmx3M Test. Вот уже 30 минут никаких OutOfMemory.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Domestic Cat
Дата 25.9.2004, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Тогда сравним 3 sлучая:
Для твоей программы :
1. -Xmx3M:

Код

...
[Full GC 4031K->3205K(4032K), 0.1841415 secs]
[Full GC 3717K->3205K(4032K), 0.1883868 secs]
[Full GC 3717K->3205K(4032K), 0.1879937 secs]
[Full GC 3717K->3218K(4032K), 0.2489411 secs]
[Full GC 3730K->3052K(4032K), 0.1824829 secs]
[Full GC 3564K->3052K(4032K), 0.1874232 secs]
[Full GC 3564K->3053K(4032K), 0.1959501 secs]
[Full GC 3564K->2941K(4032K), 0.1870170 secs]
^C


Тратится ~3 мб

2. -Xmx12M
Код

...
[Full GC 11602K->11308K(12160K), 0.8617902 secs]
[Full GC 12159K->12159K(12160K), 0.8175155 secs]
[Full GC 12159K->11616K(12160K), 1.0435727 secs]
[Full GC 12159K->11616K(12160K), 0.8312108 secs]
[Full GC 12160K->11668K(12160K), 0.9060843 secs]
[Full GC 12159K->11668K(12160K), 0.6784268 secs]
[Full GC 12159K->11371K(12160K), 0.8578586 secs]
[Full GC 12159K->11400K(12160K), 1.1487641 secs]
^C


Тратится ~10 мб

Если убрать throw new Exception():

3. -Xmx500K

Код

...
[GC 625K->113K(1984K), 0.0004479 secs]
[GC 625K->113K(1984K), 0.0004462 secs]
[GC 625K->113K(1984K), 0.0004409 secs]
[GC 625K->113K(1984K), 0.0004454 secs]
[GC 625K->113K(1984K), 0.0004129 secs]
[GC 625K->113K(1984K), 0.0004450 secs]
[GC 625K->113K(1984K), 0.0004338 secs]
[GC 625K->113K(1984K), 0.0004495 secs]
^C


Тратится 113 kb

Причем мегабайты уходят нe нa создание новых иксепшнов (их -то gc собирает ).
Можно попробовать и так: создать 1000000 объектов Х и пустить прогу вхолостую.


--------------------

PM   Вверх
LSD
Дата 25.9.2004, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Я яще поэксперементировал и вот что у меня вышло:
Код
public class Test
{
 public static void main(String[] args)
 {
   while(true)
   {
     for(int i = 0; i < 1000; i++)
       new X();

     System.gc();
   }
 }

 private static class X
 {  
   private static Exception ex = new Exception();

   private byte[] ballast = new byte[1024];

   public void finalize() throws Exception
   {
     throw ex;
   }
 }
}

запускаю командой java -Xms10M -Xmx10M Test.
Если при размер ballast установить в 1024, то вот уже более часа она работает без всяких OutOfMemoryError. А если ballast задать 1048576, то OutOfMemoryError вылетает на 9 проходе.
Я думаю дело в сборщике мусора, он собирает эти объекты, но как то иначе чем другие.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
LSD
Дата 25.9.2004, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Ха!!! Я кажется понял.
Если сделать так:
Код
public class Test
{
 public static void main(String[] args)
 {
   while(true)
   {
     new X();
     System.gc();
   }
 }

 private static class X
 {  
   private static Exception ex = new Exception();

   private byte[] ballast = new byte[1024 * 1024];

   public void finalize() throws Exception
   {
     throw ex;
   }
 }
}

то все работает нормально. Я думаю когда выкидывается Exception, текущий цикл сборки мусора прерывается. И такой объект будет собран только в следующий раз, при этом финализация для него уже не запускается.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Domestic Cat
Дата 25.9.2004, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



smile.gif smile.gif

Цитата
The package java.lang.ref describes weak references , which interact with garbage collection and finalization. As with any API that has special interactions with the language, implementors must be cognizant of any requirements imposed by the java.lang.ref API. This specification does not discuss weak references in any way. Readers are referred to the API documentation for details.


По-моему, такие "полумертвые" объекты хранятся как WeakReference'ы и потому мы почти получаем "memory leak". Если объект Х большой, то gc простo нe успеваеt убить WeakReference
и получается плохo smile.gif


--------------------

PM   Вверх
LSD
Дата 25.9.2004, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Полумертвые обекты хранятся как PhantomReference.
Цитата
Phantom reference objects, which are enqueued after the collector determines that their referents may otherwise be reclaimed. Phantom references are most often used for scheduling pre-mortem cleanup actions in a more flexible way than is possible with the Java finalization mechanism.
.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Domestic Cat
Дата 25.9.2004, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



А спек говорит прo WeakReference:

http://java.sun.com/docs/books/jls/second_....doc.html#44748

smile.gif


--------------------

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0880 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.