-
> DVM © (29.05.16 11:48) [119]
> Мне кажется, если в программе возникает OutOfMemory - это > повод задуматься об алгоритмах и архитектуре программы, > а не добавлять недокументированные костыли. > Может я конечно не прав и в мире Java все не так.
Прав, естественно. Только ошибку сначала надо локализовать, не так ли?
-
> Юрий Зотов © (29.05.16 12:34) [120]
> Только ошибку сначала надо локализовать, не так ли?
Разумеется, причем все такие места, т.к. их может быть не одно. Но как в этом поможет упомянутая freeMemory мне правда не понятно. Она скорее даже навредит, замаскировывая проблему. Плюс ее вызов, вероятно, приводит к некоторому замедлению работы программы из-за принудительной сборки мусора, если таковая имеет быть.
-
> Юрий Зотов © (26.05.16 23:09) [109] >
Интересно, почему Java сама не сделала сборку мусора, когда память закончилась.
-
> Но как в этом поможет упомянутая freeMemory мне правда не > понятно.
Надо же было как-то понять, где конкретно съедается много памяти.
> Плюс ее вызов, вероятно, приводит к некоторому замедлению > работы программы и
При отладке это не имеет значения.
> почему Java сама не сделала сборку мусора,
Сам удивился.
-
Заставь дурака Богу молиться, он и лоб расшибёт. Это относится как к ярым противникам goto, так и ярых его сторонников. Причём, к сожалению, вторых я не видел. А то я хотя бы понял, с кем тут борятся )
-
> Интересно, почему Java сама не сделала сборку мусора, когда > память закончилась.
Сборка мусора имеет наименьший приоритет, поэтому она выполняется в моменты, когда программе ну совсем нечем заняться. Кстати, об этом в документации и по яве и по визуальной студии написано. В общем-то, по этой причине и сделаны функции принудительного запуска сборщика.
-
> поэтому она выполняется в моменты, когда программе ну совсем > нечем заняться
то есть такой простой код while(true) на джаве с аут оф мемори упадет?
-
> Сборка мусора имеет наименьший приоритет
в отдельном потоке он
> то есть такой простой код > while(true) { new Object(); } > на джаве с аут оф мемори упадет?
нет, такой упадет:
ArrayList list = new ArrayList(); while(true) { list.add(new Object()); }
-
Плохиш © (30.05.16 00:47) [125] нету в Java принудительной сборке есть gc(), но ее вызов НЕ ГАРАНТИРУЕТ запуска сборщика
|