event и Запуск GC
От: Аноним  
Дата: 23.03.07 16:48
Оценка:
Здравствуйте,
Столкнулся с интересной проблемой:
Проект Swing + J2SE, множество классов, инстансов, поэтому имеет место дефицит памяти.
Я обнуляю ссылки, но почему-то GC не запускается т.е. память не освобождается и так может продолжаться часами. Но как только я делаю minimize и maximize главному окну программы, то все сразу освобождается и все хорошо.
Может происходит какой-нибудь event для GC?
Буду очень благодарен за любую помощь.

Спасибо
Re: event и Запуск GC
От: JSerge Россия  
Дата: 23.03.07 17:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте,

А>Столкнулся с интересной проблемой:
А>Проект Swing + J2SE, множество классов, инстансов, поэтому имеет место дефицит памяти.
А>Я обнуляю ссылки, но почему-то GC не запускается т.е. память не освобождается и так может продолжаться часами. Но как только я делаю minimize и maximize главному окну программы, то все сразу освобождается и все хорошо.
А>Может происходит какой-нибудь event для GC?
А>Буду очень благодарен за любую помощь.

А>Спасибо



Обнулять ссылки надо только для того, чтобы GarbageCollector мог почистить память, занимаемую объектами, на которые ссылки и ведут, не более. Сборка мусора запускается тогда, когда JVM посчитает это нужным, и никакие вызовы System.gc() реально не помогут (хотя вызывать, конечно, можно). Если сборка не запускается — значит текущего количества свободной памяти достаточно
Re[2]: event и Запуск GC
От: Аноним  
Дата: 23.03.07 17:46
Оценка:
Здравствуйте, JSerge, Вы писали:

JS>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте,

А>>Столкнулся с интересной проблемой:
А>>Проект Swing + J2SE, множество классов, инстансов, поэтому имеет место дефицит памяти.
А>>Я обнуляю ссылки, но почему-то GC не запускается т.е. память не освобождается и так может продолжаться часами. Но как только я делаю minimize и maximize главному окну программы, то все сразу освобождается и все хорошо.
А>>Может происходит какой-нибудь event для GC?
А>>Буду очень благодарен за любую помощь.

А>>Спасибо



JS>Обнулять ссылки надо только для того, чтобы GarbageCollector мог почистить память, занимаемую объектами, на которые ссылки и ведут, не более. Сборка мусора запускается тогда, когда JVM посчитает это нужным, и никакие вызовы System.gc() реально не помогут (хотя вызывать, конечно, можно). Если сборка не запускается — значит текущего количества свободной памяти достаточно


В том-то и дело, что программа ест память и падает на Out of memory, а сделаешь ей minimize maximize и все очищается, прямо не знаю что делать...
Re[3]: event и Запуск GC
От: Дмитрий В  
Дата: 23.03.07 20:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, JSerge, Вы писали:


А>В том-то и дело, что программа ест память и падает на Out of memory, а сделаешь ей minimize maximize и все очищается, прямо не знаю что делать...

Да увеличь выделяемую программе память.
Параметры -Xms128m -Xmx512m при запуске (циферки свои можешь поставить)
Re[2]: event и Запуск GC
От: Cyberax Марс  
Дата: 24.03.07 20:53
Оценка: -2
Здравствуйте, JSerge, Вы писали:
JS>Обнулять ссылки надо только для того, чтобы GarbageCollector мог почистить память, занимаемую объектами, на которые ссылки и ведут, не более. Сборка мусора запускается тогда, когда JVM посчитает это нужным, и никакие вызовы System.gc() реально не помогут (хотя вызывать, конечно, можно). Если сборка не запускается — значит текущего количества свободной памяти достаточно
Вместо того, чтобы говорить бред — стоит написать тестовую программу (или поставить IDEA) и проверить.

System.gc() реально запускает мусоросборщик. Кстати, обычно это делается и при minimize.
Sapienti sat!
Re: event и Запуск GC
От: Cyberax Марс  
Дата: 24.03.07 20:54
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Буду очень благодарен за любую помощь.

Во-первых, надо проверить программу профилятором — может там утечки памяти есть.
Во-вторых, покрутить настройки GC — http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html
Sapienti sat!
Re[3]: event и Запуск GC
От: dshe  
Дата: 26.03.07 06:26
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, JSerge, Вы писали:

JS>>Обнулять ссылки надо только для того, чтобы GarbageCollector мог почистить память, занимаемую объектами, на которые ссылки и ведут, не более. Сборка мусора запускается тогда, когда JVM посчитает это нужным, и никакие вызовы System.gc() реально не помогут (хотя вызывать, конечно, можно). Если сборка не запускается — значит текущего количества свободной памяти достаточно

C>Вместо того, чтобы говорить бред — стоит написать тестовую программу (или поставить IDEA) и проверить.

C>System.gc() реально запускает мусоросборщик. Кстати, обычно это делается и при minimize.

Можно пример кода, демострирующий, что явный System.gc() помогает избежать OOM?
--
Дмитро
Re[3]: event и Запуск GC
От: bolshik Россия http://denis-zhdanov.blogspot.com/
Дата: 26.03.07 06:29
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

C>...

C>System.gc() реально запускает мусоросборщик. Кстати, обычно это делается и при minimize.

Не, ну это ты зря.

Runtime.gc()

...Calling this method suggests that the Java virtual machine expend effort toward recycling unused objects in order to make the memory they currently occupy available for quick reuse...

http://denis-zhdanov.blogspot.com
Re[4]: event и Запуск GC
От: Cyberax Марс  
Дата: 26.03.07 12:43
Оценка:
Здравствуйте, bolshik, Вы писали:


C>>...

C>>System.gc() реально запускает мусоросборщик. Кстати, обычно это делается и при minimize.
B>Не, ну это ты зря.
B>Runtime.gc()
B>

B>...Calling this method suggests that the Java virtual machine expend effort toward recycling unused objects in order to make the memory they currently occupy available for quick reuse...

System.gc()
/**
* Runs the garbage collector.
* <p>
* Calling the <code>gc</code> method suggests that the Java Virtual
* Machine expend effort toward recycling unused objects in order to
* make the memory they currently occupy available for quick reuse.
* When control returns from the method call, the Java Virtual
* Machine has made a best effort to reclaim space from all discarded
* objects.

* <p>


На практике во всех JVM, которые я видел, System.gc() вызывает полный цикл сборки.
Sapienti sat!
Re[5]: event и Запуск GC
От: C0s Россия  
Дата: 26.03.07 12:48
Оценка: 1 (1)
Здравствуйте, Cyberax, Вы писали:

C>На практике во всех JVM, которые я видел, System.gc() вызывает полный цикл сборки.


не имея ни малейшего желания ввязываться в этот, поднимаемый уже в 65535й раз спор, предположу, что сиё утверждение можно побороть параметрами jvm, задаваемыми в командной строке. при этом, как я понимаю, внутри программы проанализировать, как именно запараметризовали jvm, нормальным способом не удастся
Re: event и Запуск GC
От: JSerge Россия  
Дата: 26.03.07 13:08
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте,

А>Столкнулся с интересной проблемой:
А>Проект Swing + J2SE, множество классов, инстансов, поэтому имеет место дефицит памяти.
А>Я обнуляю ссылки, но почему-то GC не запускается т.е. память не освобождается и так может продолжаться часами. Но как только я делаю minimize и maximize главному окну программы, то все сразу освобождается и все хорошо.
А>Может происходит какой-нибудь event для GC?
А>Буду очень благодарен за любую помощь.

А>Спасибо



Есть забавный подход — код, который может кинуть OoE, обрамлять в try-catch(OoE) и в catch-блоке делать попытки сбора мусора. И соот-но, после успешной (как определить успешность? А хрен знает. Можно разницу между freeMem-было и freeMem-стало смотреть) сборки пробовать вызывать тот код, который может кинуть OoE
Причем "попытки сбора мусора" — это не просто один вызов System.gc(), а несколько (раз пять), причем с промежутками (Thread.sleep()) между вызовами по 0.1..0.2 сек — так чтобы примерно до секунды общего простоя набиралось.
Re[6]: event и Запуск GC
От: Blazkowicz Россия  
Дата: 26.03.07 13:19
Оценка: 1 (1)
Здравствуйте, C0s, Вы писали:

C0s>не имея ни малейшего желания ввязываться в этот, поднимаемый уже в 65535й раз спор, предположу, что сиё утверждение можно побороть параметрами jvm, задаваемыми в командной строке. при этом, как я понимаю, внутри программы проанализировать, как именно запараметризовали jvm, нормальным способом не удастся


-XX:+DisableExplicitGC
Re[5]: event и Запуск GC
От: bolshik Россия http://denis-zhdanov.blogspot.com/
Дата: 26.03.07 13:20
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>...


C>На практике во всех JVM, которые я видел, System.gc() вызывает полный цикл сборки.


На практике да. В общем же случае спецификация не гарантирует этого.
http://denis-zhdanov.blogspot.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.