powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Вторничная штука
22 сообщений из 22, страница 1 из 1
Вторничная штука
    #40023777
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот такая штука.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
/**
 * SkimpyMap is map with minimal footprint
 *
 * - contains no buckets
 * - contains from 0 to 2 keys
 * - lookup is linear :)
 * - lookup is still fast because of ... Aha-ha..:)
 */
public class SkimpyMap<K,V> implements Map<K,V> {

    public static final int MAX_KEYS = 2;

    private Object[] keys;
    private Object[] values;

    .....



Обсудите
...
Рейтинг: 0 / 0
Вторничная штука
    #40023833
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Но зачем?
...
Рейтинг: 0 / 0
Вторничная штука
    #40023836
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В смысле зачем нужен map из двух элементов?
...
Рейтинг: 0 / 0
Вторничная штука
    #40023851
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я решил что 2 элемента составляют некий технический порог. Когда массив ещё конкурирует с хешмапой. Впрочем нужен хороший jmh тест.

Но можно сделать и 3 элемента.
...
Рейтинг: 0 / 0
Вторничная штука
    #40023905
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Flat3Map изобретаете?
...
Рейтинг: 0 / 0
Вторничная штука
    #40023915
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм.. может быть. Надо глянуть сорцы.
...
Рейтинг: 0 / 0
Вторничная штука
    #40023949
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне одному кажется, что железо в скором времени дорастет до тех высот, когда уже будет все равно ArrayList там использовать, или LinkedList для вставки в начало?
...
Рейтинг: 0 / 0
Вторничная штука
    #40023958
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreen
Мне одному кажется, что железо в скором времени дорастет до тех высот, когда уже будет все равно ArrayList там использовать, или LinkedList для вставки в начало?


Врядли. Уже 20 лет как
...
Рейтинг: 0 / 0
Вторничная штука
    #40023963
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну если интересно, то в scala реализованы специальные подклассы для мапы содержащей один элемент, два, три и четыре. и только если количество увеличивается больше четырех - тогда уже в ход идет обычная мапа.
...
Рейтинг: 0 / 0
Вторничная штука
    #40023966
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну в Java тоже есть мапа для 1 ключа.

Поясню откуда возник вопрос. Несколько лет назад я смотрел dump одной продуктовой системы (JBoss+App)
и заметил что большая часть объектов - это реализации HashMap или ConcurrentHashMap.

И меня заинтересовал footprint.
...
Рейтинг: 0 / 0
Вторничная штука
    #40023985
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
....
И меня заинтересовал footprint.


private Object [] keys;
...
Рейтинг: 0 / 0
Вторничная штука
    #40024004
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какие будут предложения?
...
Рейтинг: 0 / 0
Вторничная штука
    #40024015
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не использовать ))) ни стандартные коллекции, ни box'инг/unbox'инг
...
Рейтинг: 0 / 0
Вторничная штука
    #40024117
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На корректность не проверял еще. Надеюсь работает хотя-бы правильно.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
@State(Scope.Thread)
@BenchmarkMode(Mode.Throughput)
@Warmup(iterations = 1)
@Fork(1)
@Measurement(iterations = 3)
public class MyBenchmark {

    private SkimpyMap<String,String> skimpyMap = new SkimpyMap<>();

    private Map<String, String> hashMap = new HashMap<>();

    private Map<String, String> javaTreeMap = new HashMap<>();

    @Setup
    public void setup() {

    }

    @Benchmark
    public void skimpy() {
        skimpyMap.put("1","");

        skimpyMap.put("2","");
        skimpyMap.remove("1");

        skimpyMap.put("3","");
        skimpyMap.remove("2");

        skimpyMap.put("4","");
        skimpyMap.remove("3");

        skimpyMap.remove("4");

        skimpyMap.clear();
    }

    @Benchmark
    public void hash() {
        hashMap.put("1","");

        hashMap.put("2","");
        hashMap.remove("1");

        hashMap.put("3","");
        hashMap.remove("2");

        hashMap.put("4","");
        hashMap.remove("3");

        hashMap.remove("4");

        hashMap.clear();
    }

    @Benchmark
    public void tree() {
        javaTreeMap.put("1","");

        javaTreeMap.put("2","");
        javaTreeMap.remove("1");

        javaTreeMap.put("3","");
        javaTreeMap.remove("2");

        javaTreeMap.put("4","");
        javaTreeMap.remove("3");

        javaTreeMap.remove("4");

        javaTreeMap.clear();
    }



Код: java
1.
2.
3.
4.
Benchmark            Mode  Cnt         Score         Error  Units
MyBenchmark.hash    thrpt    3  16026559.188 ± 2335586.914  ops/s
MyBenchmark.skimpy  thrpt    3  15609958.668 ± 3353609.697  ops/s
MyBenchmark.tree    thrpt    3  15744633.323 ± 1522374.688  ops/s
...
Рейтинг: 0 / 0
Вторничная штука
    #40024122
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreen
Мне одному кажется, что железо в скором времени дорастет до тех высот

Некоторые вполне себе используют ArrayList вместо Set на 10к+ элементов. Ну а чо? Всё, что меньше секунды - это мгновенно.
...
Рейтинг: 0 / 0
Вторничная штука
    #40024156
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я только щас вспомнил. Была библиотечка. Кажется trove называется.
Там - рациональное использование бакетов. Кажется метод прямой адресации.
Но я - не юзал ни разу. Можно попробовать ее в бенчмарк.

Да. И еще. Яж футпринт так и не измерял. Причем тут надо deep а не shallow.
Буду думать как мерять.
...
Рейтинг: 0 / 0
Вторничная штука
    #40024298
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Я только щас вспомнил. Была библиотечка. Кажется trove называется.
Там - рациональное использование бакетов. Кажется метод прямой адресации.


Во-первых она не была, а есть.
Там просто упор на объём, а не скорость. Массив, хэшкод- это индекс, если занято - сдвиг на некоторое число. Поиск и вставка медленнее, зато массив намного меньше, чем число бакетов, и нет никаких списков/деревьев в бакете.
...
Рейтинг: 0 / 0
Вторничная штука
    #40024322
vimba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Вот такая штука.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
/**
 * SkimpyMap is map with minimal footprint
 *
 * - contains no buckets
 * - contains from 0 to 2 keys
 * - lookup is linear :)
 * - lookup is still fast because of ... Aha-ha..:)
 */
public class SkimpyMap<K,V> implements Map<K,V> {

    public static final int MAX_KEYS = 2;

    private Object[] keys;
    private Object[] values;

    .....



Обсудите

Если засунуть и ключи и значения в один массив то сэкономите на аллокации ещё одного объекта.
...
Рейтинг: 0 / 0
Вторничная штука
    #40024329
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vimba,

Тогда тип ключа и объекта должен совпадать. В общем, усложнее кода не очень понятное ради чего.

По тестам mayton'а, если я правильно понял, пока его мапа стандартной проигрывает )))

Ну и если примитивные типы (int,long), что чаще всего и нужно, то взять нормальные не-стандартные коллекции и радоваться профиту от отсутствия box/unbox'инга.
...
Рейтинг: 0 / 0
Вторничная штука
    #40024337
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
vimba,

Тогда тип ключа и объекта должен совпадать. В общем, усложнее кода не очень понятное ради чего.

По тестам mayton'а, если я правильно понял, пока его мапа стандартной проигрывает )))

Ну и если примитивные типы (int,long), что чаще всего и нужно, то взять нормальные не-стандартные коллекции и радоваться профиту от отсутствия box/unbox'инга.

Она не то чтобы проигрывает. Она - на 0-1-2 ключа ведет себя ПОЧТИ как хеш-мапа. Но если я увеличу
число ключей до 3-4 тогда будет проявлен линейный поиск и она начнет проигрывать.
...
Рейтинг: 0 / 0
Вторничная штука
    #40024338
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin
mayton
Я только щас вспомнил. Была библиотечка. Кажется trove называется.
Там - рациональное использование бакетов. Кажется метод прямой адресации.


Во-первых она не была, а есть.
Там просто упор на объём, а не скорость. Массив, хэшкод- это индекс, если занято - сдвиг на некоторое число. Поиск и вставка медленнее, зато массив намного меньше, чем число бакетов, и нет никаких списков/деревьев в бакете.

Я посмотрел. Там упор сделан на работу с примитивами. И нет generic-подхода который используется
везде. Если посмотреть под углом Java-generics то эта библиотека - есть молчаливый упрёк в адрес
"плохой" реализации генериков Java по сравнению с С++/Scala например.
...
Рейтинг: 0 / 0
Вторничная штука
    #40024403
vimba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
vimba,

Тогда тип ключа и объекта должен совпадать. В общем, усложнее кода не очень понятное ради чего.

Нет, в массив объектов можно пихать всё что захочешь. Обратите внимание что тип массивов уже не совпадают ни с типом ключа ни с типом значения
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Вторничная штука
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]