Есть ли у PSYoungGen начальное пространство, почему не создан ни один экземпляр, а используется некоторое пространство? - PullRequest
0 голосов
/ 02 сентября 2018
/* jvm:" -XX:+PrintGCDetails -Xms20M -Xmx20M -Xmn10M -XX:SurvivorRatio=8 "*/
 public class testGC {
        private final static int _1MB = 1024*1024;

        public static void main(String args[])
        {
            testAllocation();
              }

        public static void testAllocation()
        {
            byte[] allocation1,allocation2,allocation3,allocation4;

           System.gc();

        }

    }

результат выполнения: "C: \ Program Files \ Java \ jdk1.8.0_181 \ bin \ java.exe" -XX: + PrintGCDetails -Xms20M -Xmx20M -Xmn10M -XX: SurvivorRatio = 8 "-javaagent: C: \ Program Files \ JetBrains \ IntelliJ IDEA Community Edition 2018.1.6 \ lib \ idea_rt.jar = 60552: C: \ Program Files \ JetBrains \ IntelliJ IDEA Community Edition 2018.1.6 \ bin "-Dfile.encoding = UTF-8 -classpath" C: \ Program Files \ Java \ jdk1 .8.0_181 \ jre \ lib \ charsets.jar; C: \ Program Files \ Java \ jdk1.8.0_181 \ jre \ lib \ deploy.jar; C: \ Program Files \ Java \ jdk1.8.0_181 \ jre \ lib \ ext \ access-bridge-64.jar; C: \ Program Files \ Java \ jdk1.8.0_181 \ jre \ lib \ ext \ cldrdata.jar; C: \ Program Files \ Java \ jdk1.8.0_181 \ jre \ lib \ ext \ dnsns.jar; C: \ Program Files \ Java \ jdk1.8.0_181 \ jre \ lib \ ext \ jaccess.jar; C: \ Program Files \ Java \ jdk1.8.0_181 \ jre \ lib \ ext \ jfxrt. jar; C: \ Program Files \ Java \ jdk1.8.0_181 \ jre \ lib \ ext \ localedata.jar; C: \ Program Files \ Java \ jdk1.8.0_181 \ jre \ lib \ ext \ nashorn.jar; C: \ Program Files \ Java \ jdk1.8.0_181 \ jre \ lib \ ext \ sunec.jar; C: \ Program Files \ Java \ jdk1.8.0_181 \ jre \ lib \ ext \ sunjce_provider.jar; C: \ Program Files \ Java \ jdk1.8.0_181 \ jre \ lib \ ext \ sunmscapi.jar; C: \ Program Files \ Java \ jdk1.8.0_181 \ jre \ lib \ ext \ sunpkcs11.jar; C: \ Program Files \ Java \ jdk1. 8.0_181 \ jre \ lib \ ext \ zipfs.jar; C: \ Program Files \ Java \ jdk1. 8.0_181 \ jre \ lib \ javaws.jar; C: \ Program Files \ Java \ jdk1.8.0_181 \ jre \ lib \ jce.jar; C: \ Program Files \ Java \ jdk1.8.0_181 \ jre \ lib \ jfr .jar; C: \ Program Files \ Java \ jdk1.8.0_181 \ jre \ lib \ jfxswt.jar; C: \ Program Files \ Java \ jdk1.8.0_181 \ jre \ lib \ jsse.jar; C: \ Program Files \ Java \ jdk1.8.0_181 \ jre \ lib \ management-agent.jar; C: \ Program Files \ Java \ jdk1.8.0_181 \ jre \ lib \ plugin.jar; C: \ Program Files \ Java \ jdk1.8.0 _181 \ jre \ lib \ resources.jar; C: \ Program Files \ Java \ jdk1.8.0_181 \ jre \ lib \ rt.jar; F: \ JAVA \ testGC \ target \ classes "com.zhangbing.testGC.testGC [ GC (System.gc ()) [PSYoungGen: 2020K-> 744K (9216K)] 2020K-> 752K (не создано ни одного примера, почему используется 2020k и его можно собрать до 752) (19456K), 0,0008220 секунд] [Время: пользователь = 0,00 сис = 0,00, реальное = 0,00 с] [Полный GC (System.gc ()) [PSYoungGen: 744K-> 0K (Кстати, что хорошо, значит, почему 744, но не 752) (9216K)] [ParOldGen: 8K-> 617K (10240K)] 752K-> 617K (19456K), [Metaspace: 3335K-> 3335K (1056768K)], 0,0033393 с] [Times: user = 0,00 sys = 0,00, реальная = 0,00 с] Куча PSYoungGen общая 9216K, используется 246K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000) Иден пространство 8192K, 3% использовали [0x00000000ff600000,0x00000000ff63d890,0x00000000ffe00000) из космоса 1024К, 0% использовали [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000) к космическому 1024К, 0% использовали [ 0x00000000fff00000,0x00000000fff00000,0x0000000100000000) ParOldGen общей 10240K, используется 617K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000) космическим объект 10240K, 6% используются [0x00000000fec00000,0x00000000fec9a7a0,0x00000000ff600000) Метапространство используется 3356K, 4496K мощности, совершенное 4864K, зарезервированная 1056768K класс пространства, используемого 368K, емкость 388K, выделено 512K, зарезервировано 1048576K

Процесс завершен с кодом выхода 0

1 Ответ

0 голосов
/ 02 сентября 2018

Хотя ваш код не создает никаких объектов, во время инициализации JVM будет создано множество объектов.

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

Кроме того, ваш класс наследуется от Object, поэтому его необходимо инициализировать. То же самое верно для String (который используется в качестве типа аргумента для вашего main метода).

Все эти классы должны быть загружены из файловой системы (требуется инициализация хорошего фрагмента java.io).

tl; dr тонн классов загружено и объекты создаются * длиной 1019 * до того, как ваш метод main будет даже достигнут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...