LINUX.ORG.RU

История изменений

Исправление foror, (текущая версия) :

Давай начнём с того, что эквивалентный джава код будет выглядеть так:

public class Test {

    static class Table {
        int x2;
        int x3;
        String str;
        public Table(int i) {
            x2 = i*2;
            x3 = i*3;
            str = Integer.toString(x3);
        }
    }
    private HashMap<Integer, Table> hash = new HashMap<>();

    public Test() {
    
    }

    private void log(String s) {
        System.out.println(s);
    }

    public void test() {
        for (int i = 0; i < 1000*1000; i++) {
            hash.put(i, new Table(i));
        }
        log("Generated");
        Scanner scan = new Scanner(System.in);
        scan.nextInt();
    }

    public static void main(String[] args) {
       Test m = new Test();
       m.test();
    }
}

В жс нет long-ов и v8 держит всё это дело в 32 битных переменных. Эквивалентный код на java 11 скушал как и на ноде - 180 МБ, но правда не опустилось до 127 МБ.

Пойдём дальше, если хочешь хранить большой словарь в памяти, то не используй HashMap из стандартной библиотеки:

private SmoothieMap<Integer, Table> hash = new SmoothieMap<>(1000*1000);

И вот мы достигли отметки 139 МБ.

Исходная версия foror, :

Давай начнём с того, что эквивалентный джава код будет выглядеть так:

public class Test {

    static class Table {
        int x2;
        int x3;
        String str;
        public Table(int i) {
            x2 = i*2;
            x3 = i*3;
            str = Integer.toString(x3);
        }
    }
    private HashMap<Integer, Table> hash = new HashMap<>();

    public Test() {
    
    }

    private void log(String s) {
        System.out.println(s);
    }

    public void test() {
        for (int i = 0; i < 1000*1000; i++) {
            hash.put(i, new Table(i));
        }
        log("Generated");
        Scanner scan = new Scanner(System.in);
        scan.nextInt();
    }

    public static void main(String[] args) {
       Test m = new Test();
       m.test();
    }
}

В жс нет long-ов и v8 держит всё это дело в 32 битных переменных. Эквивалентный код на java 11 скушал как и на ноде - 180 МБ, но правда не опустилось до 127 МБ.

Пойдём дальше, если хочешь хранить большой словарь в памяти, то не используй HashMap из стандартной библиотеки:

private SmoothieMap<Integer, Table> hash = new SmoothieMap<>(1000*1000);

И вот мы достигли отметки 139 МБ. Добавь вот этот ключик -XX:+UseCompressedStrings и получишь 113 МБ.