Я конечно не силен в реализации классических структур, но ради интереса заглянул в реализацию HashSet и увидел там внутри HashMap с константой для value.
Это вообще нормально? Java и так добавляет оверхеда, а тут еще вкатили сверху... Или может я чего-то не понимаю и в рантайме это отображается на более оптимальную структуру? Или может убирается оверхед с константным value?
Мне сейчас просто нет времени разобраться самому, но может хоть на лоре кто-то задавался подобным вопросом?
UPD1: Видимо это как связано с легаси, когда указатели были по 4 байта? И в итоге без value HashMap.Node всё равно выравнивался на 16 байтов? Но теперь же указатели по 8 байт и без value выравнивание было бы на 24 байта, а с value на 32 байта? Или то, что кеш-линия на 64 байта и всё нормалёк, всё равно больше 2 нод не запихать?