|
|
|
Как освободить ресурсы
|
|||
|---|---|---|---|
|
#18+
Консольная программа, когда только загрузилась занимет 10 Мб памяти (процесс javaw). Далее программа проходит первый круг цикла, выполнив все что нужно, и засыпает. После "пробуждения" процесс повторяется. Проблема в том, что память не освобождается, несмотря на закрытие ресурсов. На момент засыпания она уже занимает более 50 Мб в памяти и похоже сбрасывать это значение не собирается. Каие методы есть, чтобы освободить память? Такое впечатление, что все что программа наработала до точки засыпания она держит в памяти, что совсем не обязательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2017, 21:33 |
|
||
|
Как освободить ресурсы
|
|||
|---|---|---|---|
|
#18+
-Xmx можно поменьше задать. VisualVM запустите и посмотрите может ли gc что-то собрать. Если не может - сделайте дамп кучи. Если дело не в потреблении, то можно выбрать gc попроще и настройками заставить собирать почаще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2017, 21:39 |
|
||
|
Как освободить ресурсы
|
|||
|---|---|---|---|
|
#18+
rema174, Проверьте ещё раз что все переменные освобождаете перед засыпанием. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2017, 22:55 |
|
||
|
Как освободить ресурсы
|
|||
|---|---|---|---|
|
#18+
rema174, Непонятно, почему у вас акцент на засыпание? Делаете тест из 1000 циклов. Память не должна расти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2017, 23:15 |
|
||
|
Как освободить ресурсы
|
|||
|---|---|---|---|
|
#18+
rema174Консольная программа, когда только загрузилась занимет 10 Мб памяти (процесс javaw). Далее программа проходит первый круг цикла, выполнив все что нужно, и засыпает. После "пробуждения" процесс повторяется. Проблема в том, что память не освобождается, несмотря на закрытие ресурсов. На момент засыпания она уже занимает более 50 Мб в памяти и похоже сбрасывать это значение не собирается.Глупо смотреть на размер (какой из трёх) памяти и делать далеко идущие выводы - (системное) управление памятью сложнее, чем кажется. P.S. Кроме рекомендации "Xms == Xmx" могу напомнить, что JVM "неохотно" возвращает память системе. Да и незачем это. P.P.S. Ну и разновсяческое от Русиновича ( RAMMap / VMMap ). Только какую проблему решаем-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2017, 02:39 |
|
||
|
Как освободить ресурсы
|
|||
|---|---|---|---|
|
#18+
Petro123rema174, Непонятно, почему у вас акцент на засыпание? речь о том что засыпает не на секунду, а на продолжительное время и gc мог бы сделать что надо за это время ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2017, 11:01 |
|
||
|
Как освободить ресурсы
|
|||
|---|---|---|---|
|
#18+
rema174речь о том что засыпает не на секунду, а на продолжительное время и gc мог бы сделать что надо за это время А мог бы и не сделать. Как вы определили что GC ничего не делал? Java под виндой уже научилась возвращать память? Графики GC будем смотреть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2017, 11:03 |
|
||
|
Как освободить ресурсы
|
|||
|---|---|---|---|
|
#18+
rema174, Там не так всё просто, иначе все бы тестировали засыпанием. Но ведь тестируют циклы циклами))). И 50 мегов это ничто. Пустяк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2017, 11:54 |
|
||
|
Как освободить ресурсы
|
|||
|---|---|---|---|
|
#18+
rema174Проблема в том, что память не освобождается, несмотря на закрытие ресурсов. На момент засыпания она уже занимает более 50 Мб в памяти и похоже сбрасывать это значение не собирается.В чем "проблема" и зачем VM освобождать память? 50 Мб - это заведомо меньше разрешенного по умолчанию размера кучи JVM, поэтому она ее смело использует по своему усмотрению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2017, 12:27 |
|
||
|
Как освободить ресурсы
|
|||
|---|---|---|---|
|
#18+
Зашедший, возможно, так есть, учитывая что стандартный InitialHeapSize: 60Mb ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2017, 21:11 |
|
||
|
Как освободить ресурсы
|
|||
|---|---|---|---|
|
#18+
rema174Консольная программаrema174( процесс javaw )это не консольное приложение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 03:50 |
|
||
|
Как освободить ресурсы
|
|||
|---|---|---|---|
|
#18+
Usman, та какая разница! консольное приложение, где выполняется?! :)) - в jvm! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2017, 08:44 |
|
||
|
Как освободить ресурсы
|
|||
|---|---|---|---|
|
#18+
rema174Консольная программа, когда только загрузилась занимет 10 Мб памяти (процесс javaw). Далее программа проходит первый круг цикла, выполнив все что нужно, и засыпает. После "пробуждения" процесс повторяется. Проблема в том, что память не освобождается, несмотря на закрытие ресурсов. На момент засыпания она уже занимает более 50 Мб в памяти и похоже сбрасывать это значение не собирается. Каие методы есть, чтобы освободить память? Такое впечатление, что все что программа наработала до точки засыпания она держит в памяти, что совсем не обязательно. в код добавлено использование нескольких классов из свинга и теперь " на момент засыпания " процесс javaw занимает 75 Мб — т.е. явно держит в памяти загруженные классы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2018, 10:18 |
|
||
|
Как освободить ресурсы
|
|||
|---|---|---|---|
|
#18+
rema174в код добавлено использование нескольких классов из свинга и теперь " на момент засыпания " процесс javaw занимает 75 Мб — т.е. явно держит в памяти загруженные классы. проблема в чём? Кто сказал что на засыпание должно быть не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2018, 11:04 |
|
||
|
Как освободить ресурсы
|
|||
|---|---|---|---|
|
#18+
Petro123, может так и должно быть... схема примерно такая while(true){ new Class_A().doWork(); //сделай работу и исчезни new Class_B().doWork(); //сделай работу и исчезни new Class_C().doWork(); //сделай работу и исчезни ... // чем больше создается разных объектов, тем больше разных классов загружаются в память, так? // теперь идем спать... а JVM тем временем поразгребает мусор, так? } короче говоря, чем больше напихано в цикл, тем больше жрет памяти, хотя объекты в цикле НЕ переиспользуются, - это нормально? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2018, 11:29 |
|
||
|
Как освободить ресурсы
|
|||
|---|---|---|---|
|
#18+
rema174короче говоря, чем больше напихано в цикл, тем больше жрет памяти, хотя объекты в цикле НЕ переиспользуются, - это нормально? 1. Убери слово засыпает и реши более простую задачу без этого слова. 2. Что сделал по первому же ответу в твоей теме? Ведь ты повторил всё слово в слово из начала темы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2018, 12:53 |
|
||
|
Как освободить ресурсы
|
|||
|---|---|---|---|
|
#18+
Petro123Что сделал по первому же ответу в твоей теме? запуск с -Xmx32m практически дает очень мало, а экспериментировать экзотикой пока не охота гораздо интересней понять почему так происходит, а, возможно, так и должно быть Petro123Убери слово засыпает и реши более простую задачу без этого слова что плохого, что процесс засыпает? а задача и так простая ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2018, 13:40 |
|
||
|
Как освободить ресурсы
|
|||
|---|---|---|---|
|
#18+
rema174 // чем больше создается разных объектов, тем больше разных классов загружаются в память, так? Нет, не так. Чем больше классов тем больше классов. Чем больше объектов, тем больше объектов. Но без пересечений этих двух. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2018, 13:44 |
|
||
|
Как освободить ресурсы
|
|||
|---|---|---|---|
|
#18+
rema174что плохого, что процесс засыпает? а задача и так простая А терминах операционной системы есть понятие процесс, но нет понятия спящего процесса. Вы опять изобретаете свою терминологию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2018, 13:45 |
|
||
|
Как освободить ресурсы
|
|||
|---|---|---|---|
|
#18+
rema174гораздо интересней понять почему так происходит, а, возможно, так и должно быть возьмите visualvm (jdk/bin/jvisualvm.exe) снимите дамп кучи. Посмотрите на сколько соклатился её объем (перед дампом запускается Full GC). Потом загляните в кучу на предмет того есть ли там лишние объеты или нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2018, 13:49 |
|
||
|
Как освободить ресурсы
|
|||
|---|---|---|---|
|
#18+
Blazkowiczrema174 // чем больше создается разных объектов, тем больше разных классов загружаются в память, так? Нет, не так. Чем больше классов тем больше классов. Чем больше объектов, тем больше объектов. Но без пересечений этих двух. мне кажется мы говорим об одном и тоже, ведь объекты создаются на основании классов, т.е. не без классов; т.о. пересечение тут есть в том смысле, что одно с другим связано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2018, 14:16 |
|
||
|
Как освободить ресурсы
|
|||
|---|---|---|---|
|
#18+
rema174мне кажется мы говорим об одном и тоже, ведь объекты создаются на основании классов, т.е. не без классов; т.о. пересечение тут есть в том смысле, что одно с другим связано Возможно, но пока вы изъясняетесть витееватыми и не четкими терминами и делаете такие же выводы, этого сразу не ясно. Классы можно загружать в память и без объектов, например. Количество итераций цикла, который вы привели к количеству загруженых классов тоже отношения не имеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2018, 14:41 |
|
||
|
Как освободить ресурсы
|
|||
|---|---|---|---|
|
#18+
Blazkowiczвозьмите visualvm (jdk/bin/jvisualvm.exe) снимите дамп кучи. HeapDump на моем приложении ? Blazkowiczперед дампом запускается Full GC имеется ввиду запустить PerformGC ? BlazkowiczПосмотрите на сколько сократился её объем Имеется ввиду сравнить значения size из закладки Heap в окне Monitor ? BlazkowiczПотом загляните в кучу на предмет того есть ли там лишние объеты или нет как понять какие из них лишние? смотреть на дампе в классах на инстансы? что там можно понять? возьмите visualvm (jdk/bin/jvisualvm.exe) снимите дамп кучи. Посмотрите на сколько соклатился её объем (перед дампом запускается Full GC). Потом загляните в кучу на предмет того есть ли там лишние объеты или нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2018, 15:31 |
|
||
|
Как освободить ресурсы
|
|||
|---|---|---|---|
|
#18+
rema174а экспериментировать экзотикой пока не охота а запустить тесть на пол суток в цикле и следить за памятью не судьба? Ведь это простейший юз-кейс по памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2018, 15:43 |
|
||
|
Как освободить ресурсы
|
|||
|---|---|---|---|
|
#18+
ну что, ребяты... вызовами к памяти, доступной через рантайм, выяснилось, что приложение использует около 7Mb, что уже похоже на правду, и это с xmx10Mb, но виндовый процесс на восьмой джаве все-равно великоват, и какая там связь скорее всего знает только узкий круг людей, а jvisulvm пока не осилил, некому научить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2018, 21:35 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39560920&tid=2122193]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
143ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 15ms |
| total: | 250ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...