2014-01-09 3 views
6

Есть много вопросов по этому вопросу, но ответ не удовлетворил меня; Я кодирую простое окно GUI с помощью Swing. В настоящее время он содержит только 4 кнопки, и один из них открывает файл выбора.Использование памяти Java Swing

Когда я использую инструмент мониторинга VisualVM смотреть на использование памяти, результат показан ниже:

memory usage http://img17.imageshack.us/img17/3589/8txc.png

Первая щука появилась, когда я нажал на кнопку, то я не сделал ничего.

Это нормально для простоя приложения к потреблению 10M/мин (если он ничего не делает?)

Так как я должен сделать Quizz, как апплет с изображением, я должен использовать для вызова System.gc() каждый время я перехожу к следующему вопросу, чтобы избежать (потенциально огромного?) использования памяти?

+2

Calling system.gc() программно часто не ведет нигде, поскольку современные сборщики мусора имеют свою собственную эвристику, чтобы сделать чистку или нет. Я не уверен, почему ваш код делает это, это может быть просто нормально (пожалуйста, напишите все это, чтобы я мог попробовать, используя jconsole). Было бы интересно также увидеть его эволюцию за 6 минут исполнения. –

+1

* «В этом вопросе много вопросов, но ответ не удовлетворил меня». Что, а не один из ответов на эти вопросы, указывал на то, что наблюдение за памятью Java-приложения. примерно так же полезно, как смотреть на свой собственный пупок в течение нескольких часов подряд? Беспокойство об этом, когда вы видите 'OutOfMemoryError', тогда у вас есть утечка памяти, которая нуждается в исправлении. В противном случае: если он не сломался, не исправляйте его. –

+0

Jorge_B: ответ вискиспидера показывает, что вы были правы; Мне следовало подождать дольше. AndrewThompson: это странный способ заботиться о памяти, но я попытаюсь применить ваш совет в будущем :-) – bagage

ответ

2

я мог воссоздать то, что вы видели, с простой тестовой программы, но если вы позволите монитор отслеживать немного больше ...

enter image description here

CPU был на уровне 0% все время (просто сидел там открытый JFileChooser). Колебания памяти любопытны, но я думаю, что JVM должна выполнять все виды фонового управления и обслуживания. Эта работа будет использовать память, которая в конечном итоге будет расти. И периодически он очищается после себя.

Еще одна вещь, которую следует учитывать, это использование этой памяти в уже выделенной куче. Ваша программа на самом деле использует последовательное количество реальной памяти все время, как вы можете видеть на плоской оранжевой линии.

0

Я думаю, проблема в JFileChooser. Когда я использовал его, я заметил, что fileChooser «что-то ждет». И когда я неправильно закрыл программу, fileChooser выдает ошибку. Может быть, это поможет :)

Смежные вопросы