У меня есть Java-апплет (фактический <APPLET>), который часто генерирует сообщения журнала для System.out. Если в браузере пользователя включена консоль Java, она, конечно, сохранит ссылки на все эти строки и предотвратит их сборку мусора. Проблема заключается в количестве сообщений журнала, которые сохраняет консоль: куча апплета растет очень быстро. После четырех дней работы он выдаст исключение OutOfMemory. Насколько я могу судить по jmap и jhat, строки журнала представляют большую часть его следа.
Есть ли API для более жесткого ограничения количества или общего размера сообщений, сохраняемых консолью Java? В случае ошибки мне понадобятся только несколько последних сообщений. Консоль действительно начинает удалять самые старые сообщения в какой-то момент, но только после того, как они действительно выросли.
Я понимаю, что возможные решения - «не запускать консоль» или «просто очистить консоль», но пробовали ли вы когда-нибудь спросить нетехнического пользователя, включена ли у него консоль Java? Или попробовать пройти их через просмотр и очистку? Я действительно хотел бы, чтобы они оставили консоль включенной, чтобы я мог видеть сообщения, если есть ошибка.




Вместо System.out.println используйте java.util.logging. Позже гораздо проще изменить уровни журнала и уменьшить количество сообщений журнала.
Также проверьте MemoryHandler, он использует буфер и автоматически отбрасывает старые сообщения журнала.