LINUX.ORG.RU

Джаву хотят научить кушать меньше памяти

 


0

3

String deduplication спорное решение, а вот Compact Strings http://openjdk.java.net/jeps/254 выглядит интереснее. На www бекенде или кому с текстами работать очень пригодится. Что не может не радовать )

Бенчмарки http://cr.openjdk.java.net/~shade/density/state-of-string-density-v1.txt

★★★★★

Последнее исправление: foror (всего исправлений: 2)
Ответ на: комментарий от Legioner

А есть буквы, код которых в UTF-16 не вмещаются в 2 байта

Так UTF-16 в этом смысле ничем не лучше UTF-8. В Java и Windows это просто традиция.

monk ★★★★★
()

Отвечаю не на пост, лор глючит.

А при чём тут UTF-16? В UCS-4 это один символ (сам пишешь U+10330).

При том, что в Java он хранится в кодировке UTF-16.

Этот пример расходится с твоей трактовкой «четверть количества байт в кодировке UCS-4».

Ничуть. Этот символ, как и любой другой, в UCS-4 занимает ровно 4 байта.

Ещё раз. Два примера: латинская буква «A» и готическая буква «Ahsa».

        String a = "\u0041"; // latin A
        String ahsa = "\ud800\udf00"; // gothic Ahsa
        System.out.println(a.length()); // 1
        System.out.println(ahsa.length()); // 2
        System.out.println(a.getBytes("UTF-32").length); // 4
        System.out.println(ahsa.getBytes("UTF-32").length); // 4
При этом обе эти строки при кодировке в UTF-32 будут занимать 4 байта, несмотря на то, что length в Java для них возвращает разные значения.

Поэтому для строки a твоё предположение

Считаю верным вариант «четверть количества байт в кодировке UCS-4»

верно. length() возвращает 1, количество байтов в кодировке UTF-32 4.

Но для строки ahsa твоё предположение уже неверно. length() возвращает 2, а количество байтов в кодровке UTF-32 по прежнему 4.

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 2)
Ответ на: комментарий от monk

Так UTF-16 в этом смысле ничем не лучше UTF-8. В Java и Windows это просто традиция.

Вот именно. UTF-16 ничем не лучше UTF-8. А только хуже, по многим параметрам. Во-первых места занимает для ASCII-символов в два раза больше. Во-вторых путает программистов, которые думают, что раз для английского и русского работает трактовка char-ов, как символов, значит так можно и писать и пишут миллионы строк кода, некорректно работающего с половиной юникодной таблицы. С UTF-8 по крайней мере это будет работать только для английского алфавита и на грабли человек наступит быстрее.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Вот именно. UTF-16 ничем не лучше UTF-8. А только хуже, по многим параметрам.

Полностью согласен!

monk ★★★★★
()
Ответ на: комментарий от Karapuz

Ну круто, послушаем каковы шансы увидеть это в 9-ке

foror ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.