Java Память: Heap Пространство и сборщика мусора

Узнайте о том, как Java управляет памятью через кучи пространства и сбора мусора. Понимание распределения памяти может помочь избежать утечки памяти в программах Java.

A+ A-

Недавно я написал приложение Java , которое, при запуске, требует совсем немного памяти , и я начал получать OutOfMemory сообщение об ошибке:

 Ошибка: java.lang.OutOfMemoryError: Java куча пространства 

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

Что такое Java кучи пространство?

Во-первых, позволяет понять, что такое пространство кучи. Ну, Java использует память , главным образом , в мероприятиях кучи и стека . Java сохраняет параметры, которые передаются от метода вызова к вызываемому методу , в виде структуры стека (т.е. параметры , выталкиваются в и выскочил из стека в соответствии с необходимостью). С другой стороны, куча представляет собой произвольный доступ пространство памяти, где Java создает и хранит объекты. Java создает объект в пределах этого пространства кучи везде, где он находит достаточно места, чтобы содержать объект. Итак, когда вы создаете новый объект (например , новый String () ;) объект получает создан в кучного пространстве и занимает память , которая может поместиться в. Во время сборки мусора, Java освобождает пространство кучи тех объектов, которые больше не являются ссылки. Но если число ссылки (т.е. "требуется") объектов продолжает расти, и мы не почтительное их -The JVM выбегает из кучи пространства.

Объем памяти, который потребует класс зависит от количества и типа его элементов данных.

  1. Сам класс требует минимум 8 байт
  2. Каждый член данных требуется 4 байта (длинные и дважды требует 8 байт). Даже Булева переменная использовать 4 байта, хотя для этого нужно только один бит, чтобы получить хранятся.
  3. Объем используемой памяти растет кусками по 8 байт
Оптимизация программ на Java

Первый шаг, чтобы обойти эту проблему должны пройти через программу и посмотреть, как она может быть изменена таким образом, чтобы сделать его использовать меньшую память. С тех пор стоимость памяти была крайне низкой по сравнению с тем, что это было в 1960-е годы. И программисты стали довольно экстравагантным с точки зрения учета памяти их программ. Однако до сих пор, чаще всего, нам нужно писать программы, которые требуют больше памяти, чем доступно. Бережливость в контексте использования памяти всегда хорошо, потому что он не только снижает вероятность сбоя программы, но и иногда это увеличивает скорость исполнения.

Вы должны установить объекты быть нулевым , когда они больше не нужны в вашем коде. Это еще более важно, если вы работаете в цикл, в котором вы создаете объект (ы), но затем не выбрасывайте их, когда они не требуются.

Используйте Java метод сборщика мусора

Второй шаг к оптимизации использования памяти может быть явным образом вызвать метод сбора мусора. Java автоматически вызывает этот метод, как и в случае необходимости и освобождает пространство памяти, содержащий объекты, которые больше не ссылаются. Но вы также можете вызвать этот метод явно в коде (например, после «большой задачи» является законченной и следующей «большой задачи» собирается начать). Для того, чтобы вызвать сборщик мусора, используйте:

 Runtime.getRuntime () дс (). 

Вы можете следить за состоянием памяти до и после того, как метод дс () называется.

 System.out.println ( "nnCalling мусоропровода Collectornn");
System.out.println ( "Свободная память ДО:" + Runtime.getRuntime () FreeMemory ().);
Runtime.getRuntime () дс ().
System.out.println ( "Свободная память ПОСЛЕ:". + Runtime.getRuntime () FreeMemory ());
System.out.println ( "nnGarbage коллекция finishednn"); 

Метод FreeMemory () возвращает количество свободной памяти , доступной в байтах. Для других методов , предоставляемых классом времени выполнения см Java API

Дайте больше памяти для виртуальной машины Java

Усилия по оптимизации использования памяти Несмотря на это, иногда JVM действительно нуждается в большем количестве памяти. В таких случаях мы можем сказать JVM через командную строку, чтобы использовать определенное количество памяти:

 Java -Xms2000m -Xmx3500m 

-Xms И -Xmx переключатели указать объем пространства подкачки (виртуальной памяти) , что JVM может использовать в вашей машине.

-Xms Определяет минимальный (т.е. начальная) объем памяти

-Xmx Определяет максимальный объем памяти , который может использовать JVM.

Эти значения памяти должны быть указаны в мегабайтах.

Таким образом, это было о Java управляет памятью через кучи пространства и механизм сбора мусора. Это умный выбор, и каждый Java программист должен иметь четкое представление о том, как Java управляет памятью. Только вы сможете эффективно работать на большой объем памяти программ.

Ads

Поделиться

последний

Лучшие альтернативы Ubuntu искать, если вы Linux Lover

Давайте начнем знакомство с чем-то; простой, но немного не ...

Как добавить подпись в Gmail Входящие - Добавить подпись Google в Gmail

Входящие с помощью Google была одна из лучших вещей, которы...

Еженедельно Tech News: Nokia, Google и Nintendo

Привет всем, это Пятница, 3 марта, и так же, как всегда, мы...

Raspberry Pi Проекты для начинающих - Что вы можете сделать с Raspberry Pi

Raspberry Pi представляет собой серию малой мощности, одноп...

Лучший VPN для Android 2017 года - Как использовать VPN в Android

Прошли те дни, когда виртуальные частные сети были только д...

Комментарии