2013-10-02 2 views
2

Я разработал автономное приложение в Java, но его использование 70% использования памяти ОЗУ, что заставляет систему зависать. Есть ли решение сократить использование памяти в Java-приложении. Пожалуйста помоги.Чтобы уменьшить использование ЦП Java-приложения

+0

Используйте меньше памяти, не заполняя ненужные структуры данных. –

+5

Процессор или оперативная память? что вы пытаетесь уменьшить? – logoff

+0

Мы могли бы дать вам общие решения, но это может привести к сбою или зависанию программы. Вам нужно показать нам код (однако это может не соответствовать рекомендациям [so], я не уверен). – Dukeling

ответ

-2

Убедитесь, что вы очистили свой ресурс, установив variableName = null;, когда он вам больше не нужен. Это сделает его лучшим кандидатом на сбор мусора.

Вы также можете кал сборщик мусора вручную, используя System.gc();

Но сбор мусора обычно делается автоматически. Вызов его вручную потребляет много ресурсов и должен быть последним вариантом.

Другая возможная проблема с утечкой памяти: если вы объединяете Strings. Используйте наилучшие StringBuilder, если вам нужно объединить строки.

Примечание: вы можете отслеживать использование памяти с использованием временных методов.

Tmp tmp=new Tmp(); 
Runtime runtime = Runtime.getRuntime(); 

int procs = runtime.availableProcessors(); 
String max = tmp.adjust(runtime.maxMemory()); 
String total = tmp.adjust(runtime.totalMemory()); 
String used = tmp.adjust(runtime.totalMemory() - runtime.freeMemory()); 
String free = tmp.adjust(runtime.freeMemory()); 
+1

Ручные вызовы сборщика мусора - очень плохая практика. Изменить: см. Здесь: [Почему явная сборка мусора плохая] (http://stackoverflow.com/questions/2414105/why-is-it-a-bad-practice-to-call-system-gc). – Rogue

+0

Согласен. Вызов сборщика мусора потребляет много ресурсов и не должен быть первым решением. –

+0

Я бы попробовал это и вернусь к вам. Большое спасибо за предложение. –

0

Есть многочисленные GC флаги, которые можно использовать для определения распределения вокруг виртуальной машины Java, но и во всей честности лучшая оптимизация для Java происходит от оптимизации кода первого.

Что касается, какие флаги смотреть в:

  • -Xmx1024M:

    устанавливает максимальный размер кучи JVM до 1024 мегабайт. Вы можете изменить объем ОЗУ, выделенный для вашего процесса.

  • -XX: + AgressiveOpts

    JVM супер-вариант. Это активирует другие флаги jvm. Объяснить им все это займет много времени, но в основном это позволило оптимизировать и увеличить размер кеша. Я считаю, что это старый пост на нем где-то ... аха: Old Post

+0

Я бы определенно попробовал это и вернусь к вам. –

1

Вы можете просто ограничить использование виртуальной машины Java настроек памяти JDK, или выполнить рефакторинг кода приложения, пытаясь уменьшить выделение памяти , например повторное использование экземпляров объектов, используя Singleton, между другими методами рефакторинга

+0

Я хотел бы рассмотреть это и проверить его снова –

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