Java physical memory size

Узнать размер Java Heap Memory Size

Есть проблема с Java Heap Memory Size, ее нужно нормально указать для того чтобы все нормально работало ( например, веб- сервер tomcat, liferay, OpenMRS и так далее) и в данной статье «Узнать размер Java Heap Memory Size» расскажу как можно найти оптимальное значение для java.

Сейчас я покажу вам, как использовать-XX:+PrintFlagsFinal чтобы узнать ваш размер кучи «heap size». В Java, по умолчанию и максимальный размер кучи распределяются на основании алгоритма — эргономики (ergonomics algorithm).

Как же рассчитывается Heap sizes?

Начальный размер кучи — это соотношение 1/64 физической памяти к 1 Гб. (Initial heap size of 1/64 of physical memory up to 1Gbyte)
Максимальный размер кучи — это соотношение 1/4 физической памяти до 1 Гб. (Maximum heap size of 1/4 of physical memory up to 1Gbyte)

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

memory JVM

Обзор памяти Java

Краткий обзор структуры памяти Java:

1. Java Heap Size
Место для хранения объектов, созданных приложением Java, это где Garbage Collection берет память для приложений Java. Для «тяжелого процесса Java», недостаточный размер кучи вызовет популярную ошибку: java.lang.OutOfMemoryError: Java heap space.

-Xms — Установить начальный размер Java куча «Java heap size»
-Xmx — Установить максимальный размер Java куча «Java heap size»

$ java -Xms512m -Xmx1024m JavaApp

2. Размер Perm Gen (Perm Gen Size).
Место для хранения определение загруженного класса и метаданных. Если большой кодовый, базовый проект загружен, имеет недостаточный размер Perm Gen size то это вызовит ошибку: Java.Lang.OutOfMemoryError: PermGen.

-XX:PermSize — Установить начальный размер для параметра «PermGen Size».
-XX:MaxPermSize — Установить максимальный размер для параметра «PermGen Size».

$ java -XX:PermSize=64m -XX:MaxPermSize=128m JavaApp

3. Размер java стека «Java Stack Size»
Размер java нитей (Size of a Java thread). Если проект имеет много обработки нитей, попробуйте уменьшить этот размер стека, чтобы избежать нехватки памяти.

-Xss = Установить размер стека Java (java thread stack size).

ЗАМЕТКА
Значение по умолчанию для heap size, perm gen, или stack size отличаются от различных JVM. Лучшие практически всегда определить собственные значение для сервера.

ТЕСТЫ или ГОТОВЫЕ примеры

Приведу различные тесты на разных ОС.

Среда тестирования имеет такие характеристики:

ОС : Ubuntu 13 (64 битная) (Под управлением VirtualBox)
RAM : 4Гб оперативной памяти
CPU : 1 x Процессор
JDK : 1.7

Выполним команду для отображения необходимой информации:

$ java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

Узнать размер Java Heap Memory Size в Ubuntu

Для JVM выделено следующие значения по умолчанию:

Java heap size
InitialHeapSize = 64781184 байт (61.7 Мб) и MaxHeapSize = 1038090240 байт (990Мб).

PermGen Size
PermSize = 21757952 байт (20.75 Мб), MaxPermSize = 174063616 байт (166 Мб)

Thread Stack Size
ThreadStackSize = 1024 кб (1 Мб)

Выделенный размер кучи (heap memory size) довольно близок к результатам эргономики.

#ergonomics algorithm
Initial heap size = 4096M/64 = 64 Мб
Maximum heap size = 4096M/4 = 1024 Мб

Среда тестирования имеет такие характеристики:

ОС : Mac OSX 10.9
RAM : 8 Гб оперативной памяти
CPU : 4 x Поцессор
JDK : 1.7

Запускаем команду чтобы проверить:

$ java -XX:+PrintFlagsFinal -version | grep -iE 'heapsize|permsize|threadstacksize'

Узнать размер Java Heap Memory Size в macOS X

Узнать размер Java Heap Memory Size в macOS X

Для JVM выделено следующие значения по умолчанию:

Java heap size
InitialHeapSize = 20655360 байт (19.69M) и MaxHeapSize = 331350016 bytes (316 Мб).

PermGen Size
PermSize = 21757952 байт (20.75 Мб), MaxPermSize = 85983232 байт (82 Мб).

Java Stack Size
ThreadStackSize = 1024 Кб (1 Мб)

Выделенный размер кучи памяти (heap memory size) не имеют никакого значения, если сравнить со следующий результат по алгоритму эргономики.

#ergonomics algorithm
Initial heap size = 8192M/64 = 128 Мб
Maximum heap size = 8192M/4 = 2048 Мб

Windows
Grep нет в Windows, вместо этого, мы используем Findstr.

Среда тестирования имеет такие характеристики:

ОС : Windows 8
RAM : 16 Гб
CPU : 8 x процессор
JDK : 1.7

C:\>java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"

Узнать размер Java Heap Memory Size в windows

Узнать размер Java Heap Memory Size в windows

Для JVM в Windows ОС выделено следующие значения по умолчанию:

Java heap size
InitialHeapSize = 266634176 байт (256 Мб) и MaxHeapSize = 4266146816 байт (4068 Мб).

PermGen Size
PermSize = 21757952 байт (20.75 Мб), MaxPermSize = 85983232 bytes (823 Мб).

Java Stack Size
ThreadStackSize = 0 kilobytes. (weird…)

Выделенный размер кучи памяти почти такой же как и по алгоритму эргономика:

#ergonomics algorithm
Initial heap size = 16384/64 = 256 Мб
Maximum heap size = 16384/4 = 4096 Мб

Предлагаемые для Java Memory

Ниже, я привел мою рекомендацию (параметры) для малой и средней нагрузки приложений Java 🙂

Heap = -Xms512m -Xmx1024m
PermGen = -XX:PermSize=64m -XX:MaxPermSize=128m
Thread = -Xss512k

P.S: Для большинства проектов Java, 512k памяти для потока (thread) более чем достаточно.

$ java -XX:+PrintFlagsFinal -Xms512m -Xmx1024m -Xss512k -XX:PermSize=64m -XX:MaxPermSize=128m -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

оптимаьные значения для Java Heap Memory Size

оптимаьные значения для Java Heap Memory Size

Часто задаваемые вопросы.

какая -version?
Избегайте жалоб от компилятора Java, заменить «-version» с вашим именем приложения Java.

$ java -XX:+PrintFlagsFinal | grep HeapSize

Что это -XX:+PrintCommandLineFlags?
Это -XX:+PrintCommandLineFlags используется для вывода значения,только для изменения VM (обозначается так: = символ).

Вывод

Наконец, значения по умолчанию для heap memory, perm gem и stack size отличается от JVM, не ожидайте что JVM будет использовать оптимальные значения для вашего приложения Java.

На этом, я завершаю «Узнать размер Java Heap Memory Size». Надеюсь, было познавательно.

Источник

Get Physical Memory or RAM Information in Java using OSHI library

In this tutorial, we are going to explore how to use the OSHI library to get information about the physical memory (RAM) information of the computer in a Java application. By using the API provided by OSHI Java library we will write programs to show memory of the computer and information of all physical devices located on the computer.

Add OSHI library to the Java project

To use OSHI Java library in the Gradle build project, add the following dependency into the build.gradle file.

compile group: 'com.github.oshi', name: 'oshi-core', version: '5.3.4'

To use OSHI Java library in the Maven build project, add the following dependency into the pom.xml file.

  com.github.oshi oshi-core 5.3.4 

For more information about the OSHI library you can visit the library repository at github.com/oshi/oshi

How to use OSHI to get Physical Memory Information

To use the OSHI library ro get hardware information of the computer we need to instantiate an object of SystemInfo class.

SystemInfo systemInfo = new SystemInfo();

And call method getHardware() to get HardwareAbstractionLayer that can be used to access hardware information.

HardwareAbstractionLayer hardware = systemInfo.getHardware();

Then we use the getMemory() method to receive the object of GlobalMemory class which can be used to get physical memory information.

GlobalMemory globalMemory = hardware.getMemory();

Example 1 Get Information of the Computer Memory

In the following example Java application we use GlobalMemory class to show summary information of physical memory of the computer where the application is running on.

import oshi.SystemInfo; import oshi.hardware.GlobalMemory; import oshi.hardware.HardwareAbstractionLayer; public class GetRAMInfo1  public static void main(String. args)  SystemInfo systemInfo = new SystemInfo(); HardwareAbstractionLayer hardware = systemInfo.getHardware(); GlobalMemory globalMemory = hardware.getMemory(); System.out.println(globalMemory.toString()); > >

Example 2 Get Details Information of the Computer Memory

The following Java example we access details of physical memory information. We also calculate to get used memory by subtracting the total and available memory of the computer.

The return values from OSHI library in bytes value so we can convert it to readable String by using static method FormatUtil.formatBytes().

import oshi.SystemInfo; import oshi.hardware.GlobalMemory; import oshi.hardware.HardwareAbstractionLayer; import oshi.util.FormatUtil; public class GetRAMInfo2  public static void main(String. args)  SystemInfo systemInfo = new SystemInfo(); HardwareAbstractionLayer hardware = systemInfo.getHardware(); GlobalMemory globalMemory = hardware.getMemory(); long usedMemory = globalMemory.getTotal() - globalMemory.getAvailable(); System.out.println("Total memory: " + FormatUtil.formatBytes(globalMemory.getTotal())); System.out.println("Available memory: " + FormatUtil.formatBytes(globalMemory.getAvailable())); System.out.println("Used memory: " + FormatUtil.formatBytes(usedMemory)); > >
Total memory: 15.8 GiB Available memory: 6.7 GiB Used memory: 9.2 GiB

Example 3 Get List of Physical Memory Device of the Computer

The following Java example to show how to list all physical memory devices located on the computer.

import oshi.SystemInfo; import oshi.hardware.GlobalMemory; import oshi.hardware.HardwareAbstractionLayer; import oshi.hardware.PhysicalMemory; import java.util.List; public class GetRAMInfo3  public static void main(String. args)  SystemInfo systemInfo = new SystemInfo(); HardwareAbstractionLayer hardware = systemInfo.getHardware(); GlobalMemory globalMemory = hardware.getMemory(); ListPhysicalMemory> physicalMemories = globalMemory.getPhysicalMemory(); for (PhysicalMemory physicalMemory : physicalMemories)  System.out.println(physicalMemory.toString()); > > >
Bank label: BANK 2, Capacity: 16 GiB, Clock speed: 2.7 GHz, Manufacturer: Samsung, Memory type: DDR4

Example 4 Get Details of Physical Memory Bank of the Computer

In the below Java example we are going to access the details of memory devices. The FormatUtil.formatHertz() static method in the example can be used to show value in hertz to a more readable String.

import oshi.SystemInfo; import oshi.hardware.GlobalMemory; import oshi.hardware.HardwareAbstractionLayer; import oshi.hardware.PhysicalMemory; import oshi.util.FormatUtil; import java.util.List; public class GetRAMInfo4  public static void main(String. args)  SystemInfo systemInfo = new SystemInfo(); HardwareAbstractionLayer hardware = systemInfo.getHardware(); GlobalMemory globalMemory = hardware.getMemory(); ListPhysicalMemory> physicalMemories = globalMemory.getPhysicalMemory(); for (PhysicalMemory physicalMemory : physicalMemories)  System.out.println("Manufacturer: " + physicalMemory.getManufacturer()); System.out.println("Memory type: " + physicalMemory.getMemoryType()); System.out.println("Bank/slot label: " + physicalMemory.getBankLabel()); System.out.println("Capacity: " + FormatUtil.formatBytes(physicalMemory.getCapacity())); System.out.println("Clock speed: " + FormatUtil.formatHertz(physicalMemory.getClockSpeed())); > > >
Manufacturer: Samsung Memory type: DDR4 Bank/slot label: BANK 2 Capacity: 16 GiB Clock speed: 2.7 GHz

Источник

Читайте также:  Php файл массив вывести
Оцените статью