Как определить различные имена памяти кучи Java 8? - PullRequest
0 голосов
/ 28 июня 2018

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

import java.lang.management.ManagementFactory;
import java.lang.management.MemoryPoolMXBean;
import java.lang.management.MemoryType;

public class MemTest {
    public static void main(String[]args) {
        for (MemoryPoolMXBean mpBean : ManagementFactory.getMemoryPoolMXBeans()) {
            System.out.println(mpBean.getType());
            System.out.println(mpBean.getName());
        }
    }
}

Выход из машины 1

support@vrni-platform:~$ java -version
java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)
support@vrni-platform:~$ vi MemTest.java
support@vrni-platform:~$ javac MemTest.java
support@vrni-platform:~$ java MemTest
Non-heap memory
Code Cache
Non-heap memory
Metaspace
Non-heap memory
Compressed Class Space
Heap memory
PS Eden Space
Heap memory
PS Survivor Space
Heap memory
PS Old Gen

Вывод настроек Java

java -XshowSettings:vm -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=32773376 -XX:MaxHeapSize=524374016 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops
VM settings:
    Max. Heap Size (Estimated): 485.31M
    Ergonomics Machine Class: client
    Using VM: Java HotSpot(TM) 64-Bit Server VM

java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)

Выход от машины 2

support@vrni-platform:~$ java -version
java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)
ubuntu@vrni-platform:~/logs/tsdb-server$ vim MemTest.java
ubuntu@vrni-platform:~/logs/tsdb-server$ javac MemTest.java
ubuntu@vrni-platform:~/logs/tsdb-server$ java MemTest
Non-heap memory
Code Cache
Non-heap memory
Metaspace
Non-heap memory
Compressed Class Space
Heap memory
Eden Space
Heap memory
Survivor Space
Heap memory
Tenured Gen

Вывод настроек Java

java -XshowSettings:vm -XX:+PrintCommandLineFlags -version
-XX:InitialHeapSize=262920896 -XX:MaxHeapSize=4206734336 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC
VM settings:
    Max. Heap Size (Estimated): 3.48G
    Ergonomics Machine Class: server
    Using VM: Java HotSpot(TM) 64-Bit Server VM

java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)

Может кто-нибудь дать мне знать, почему это дает два разных имени для Heap Memory, когда среда одинакова (Ubuntu 14.04, Java-версия одинакова)? Каковы все возможные имена для Heap Memory?

1 Ответ

0 голосов
/ 28 июня 2018

Области памяти кучи являются функцией используемого сборщика мусора.

Разница между машинами вызвана тем, что машина 1 классифицируется как клиентская машина, а машина 2 классифицируется как серверная машина. Причина в количестве доступной памяти. Различие в классификации приводит к тому, что выбирается другой сборщик мусора (в частности, последовательный сборщик для машины 1 и параллельный сборщик для машины 2), что, в свою очередь, вызывает разницу в областях памяти кучи.

См. Также Платформа Java, стандартное издание Руководство по настройке сборки мусора для виртуальной машины HotSpot , в частности, раздел Выбор по умолчанию для сборщика мусора, кучи и компилятора времени выполнения .

...