Java8 метаскоп и использование кучи

У меня есть этот код для динамического создания класса и загрузки его

import javassist.CannotCompileException;
import javassist.ClassPool;

public class PermGenLeak {
    private static final String PACKAGE_NAME = "com.jigarjoshi.permgenleak.";

    public static void main(String[] args) throws CannotCompileException, InterruptedException {
        for (int i = 0; i < Integer.MAX_VALUE; i++) {
            ClassPool pool = ClassPool.getDefault();
            pool.makeClass(PACKAGE_NAME + i).toClass();
            Thread.sleep(3);
        }

    }
}

Я запустил этот класс для Java 7 (jdk1.7.0_60) и, как и ожидалось, он заполнил PermGenSpace и куча осталась неиспользованной изображение показывает использование permgen сверхурочно и в конце JVM была прекращена

Теперь тот же код работал на Java 8 (jdk1.8.0_40-ea) и, как и ожидалось, продолжал расширять собственную память (Metaspace), но неожиданно для 1g Metaspace он потреблял 3g Heap в OldGen (почти 3x Metaspace поддерживалось с течением времени)

изображение показывает сверхурочное использование Metaspace и пример использования системной памяти

это письмо от Джона Масамицу а такжеэтот билет JEP говорит

интернированыString и статистика классов и некоторые разные данные были перемещены в кучу

что именно делает это увеличение в куче, поскольку он загружает больше классов в Metaspace?

Ответы на вопрос(2)

Ваш ответ на вопрос