Всем добрый день.
Вылетает программа из-за отсутствия памяти.
Я тут порылся в форуме, нашел три похожие темы.
Подскажите, как работает сборщик мусора и как ему можно помогать, чтобы он лучше справлялся со своей работой.
Что вообще нужно делать, чтобы работать с памятью аккуратно.
Если есть ссылки на подобные обсуждения, статьи или книги, буду за них признателен.
Отсутствие ручной операции освобождения памяти поначалу вскружило голову, теперь, чувствую, придется изрядно попотеть, переворачивая всю программу.
Здравствуйте, starfinder, Вы писали:
S>Всем добрый день.
S>Вылетает программа из-за отсутствия памяти.
S>Я тут порылся в форуме, нашел три похожие темы.
S>Подскажите, как работает сборщик мусора и как ему можно помогать, чтобы он лучше справлялся со своей работой.
Тут дело не в сборщике мусора, а в утечке памяти. Тут надо помнить, что несмотря на то, что память очищается автоматически, память, на которую есть ссылки от thread roots, не может быть очищена (т.е. если объект доступен из программы, нельзя очищать занимаемую им память). Т.о. если объекты создаются и ссылкт на ниъ сохраняются в каком-то доступном месте, они не могут быть собраны ==> memory leak.
S>Что вообще нужно делать, чтобы работать с памятью аккуратно.
Не сохранять ненужных ссылок
S>Если есть ссылки на подобные обсуждения, статьи или книги, буду за них признателен.
S>Отсутствие ручной операции освобождения памяти поначалу вскружило голову, теперь, чувствую, придется изрядно попотеть, переворачивая всю программу.
здесь.
Brian Goetz немного писал про утечки памяти и рассказывал про один из приемов, как с ними бороться —
Plugging memory leaks with weak references
Попробуй для начала поменять объем памяти выделенной на VM — для некоторых приложений её действительно не хватает. в Eclipse это можно сделать так: Run Configurations -> <Your Appl Name> -> (x)= Arguments -> VM Arguments -> {к примеру} -Xms64m -Xmx256m (по дефалту: -Xms32m -Xmx128m)