2012-07-03 3 views
2

У меня проблема с памятью с Java и Swing. У меня есть JTextArea (эта же проблема с JTextPane), которую я использую для перенаправления stdout из исполняемого файла C++. И поскольку я выводил много stdout, JTextPane потребляет много места. В любом случае, я перевернул его на следующий код, все на Java.JTextArea потребляет много памяти

private javax.swing.JTextArea jtextareastdout; 
.... 

for (int i = 0; i < 200000; i++) { 
    String randomstr = UUID.randomUUID().toString(); 

    jtextareastdout.setText(randomstr); //<tag_memory> 
    if (i % 100 == 0) 
     System.gc(); //<tag_no_help> 
} 

Приведенный выше код потребляет 100 МБ. С тегом tag_memory прокомментировано, намного меньше (30 МБ со всем моим другим кодом & UI). Как уменьшить использование памяти Java? В настоящее время с использованием обновления Java 7 4.

Заранее спасибо.

+0

Да, у JTextArea есть множество функций; некоторые из вас могут не понадобиться. Каковы ваши фактические требования? – trashgod

+0

Я в основном хочу показать мой stdout (и stderr) из моей программы на C++. Я просто не понимаю, куда идет вся память. – jobobo

ответ

4

Я просто не понимаю, куда идет вся память.

PlainDocument рассказывает историю: один или два 16-битовых блоков кода в код точки, карта линии начинается и все войсковое имущество нужно, чтобы сделать его доступным для редактирования. Для просмотра только для чтения я бы использовал перенаправление: yourprogram 2>&1 > view. В Java вы можете читать от stdin до List<String>, с одним String в строке и просматривать его с помощью JTable. По умолчанию renderer достаточно эффективен. Есть связанный пример here.

+0

Мне нужно перенаправить, чтобы я мог прочитать информацию, поступающую из stdout/stderr. JTable? Никогда не считал это, но, возможно, это путь. Для моего кода выше я как-то думал, что перезапись моей предыдущей строки (через .setText()) освободит предыдущую строку для сбора мусора. Память просто продолжает расти, как будто это утечка памяти. Любая подсказка о создании вышеуказанного кода работает? Благодарю. – jobobo

+0

Вам нужно будет указать свой фактический код, чтобы узнать, можно ли сделать что-нибудь еще. Если вы не используете 'JTable', вам нужно будет эмулировать использование шаблона мухи для рендеринга. – trashgod

+0

Любые предложения для хорошего профилировщика? Благодарю. – jobobo

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