/dev/stdout
4.97K subscribers
24.4K photos
3.46K videos
95 files
3.86K links
cat /dev/random
Download Telegram
Forwarded from gavr_sas
так, ну и так как я человек JVM не могу не добавить про то насколько она ахуенна, и насколько нейтив черепахи плетуться пожимая крохи комп тайм оптимизаций
—————
в 64битной системе конеш крута шо можно адресовать более 4рех гигов оперативки, нннно и каждый указатель весит в 2 раза больше
struct {
a: *A // 32 на 32, 64 на 64
b: u32
}
хуяк, на 32битной выравнивание всей структуры будет 32, а на 64 64, то есть при наличии одного указателя еще и теоретические дырки становятся больше, больше нагрузка на гц, сплошные минусы, вооот бы был способ иметь 32битные указатели но одновременно аллоцировать более 4рех гигов
————
первое, ЖВМ умеет СЖВМать ссылки!!!

каждая 64битная ссыль выглядит так
0x00000000|12345678
пока соблюдено условие что все объекты поместятся ниже адреса 2^32(4 гб),
у нас есть гарантия что первые 32 бита каждого указателя будут нулями, значит их можно нахаляву выбрасывать!
получается пока весим меньше 4 гигов можем жить в мире 32битного адресного пространства, все весит в 2 раза меньше => помещается в кеши, ниже гц нагрузка и ваще радуга
————
но 4ГБ маловато, поэтому все еще хитрее
JVM выравнивает все объекты по 8 БАЙТ
0 = 000000
8 = 001000
16 = 010000
24 = 011000

Как видно 3 последних значения всегда нули(потому что 8 это 1000), так что делаем ещщщё более сумашедшую оптимизацию
че такое 3 бита, 2*2*2 8 значений,
значит у нас есть 8 халявных значений в каждой ссылке,

берем и засовываем туда то на каком из 8ми промежутков по 4 гига мы находимся!!"!"!"№!"💪🏿🤓🌶
(8*4 32)

теперь имеем 32битные указатели
но без минусов 32битного адресного пространства в 4 гига
32 гигов то хватит всем и каждому
🤓42👍1
Forwarded from gavr_sas
https://t.iss.one/gavr_sas/4279
каждый объект имеет хедер который хранит метаинфу про то какого он типа, лок, и гц бит

8 байт mark word
4 байта compressed class pointer

изза выравнивания получаем еще дырку в 4 байта
———
Project Lilliput
сжимаем этот указатель предыдущим методом, теперь каждый хедер весит 8 байт вместо 16 (JEP 450)

class Point {
int x;
int y;
}

8 mark word
4 klass pointer
4 x
4 y
4 padding
—>
8 compact header
4 x
4 y


это просто разъеб, и минус дырки и минус оперативка, L кеши в ахуе,
пока не включено по дефолту
-XX:+UnlockExperimentalVMOptions \
-XX:+UseCompactObjectHeaders
🤯31👍1
🤬135
They pattented buying steam controller?
Or what?
🔥24👍3
/dev/stdout
They pattented buying steam controller? Or what?
Нужно было всего лишь выйти steam controller чтоб они выпустили решение проблеме которая существовала годами, valve решает проблемы конкурентов вместо них самих
😁16🍓3💯2
Forwarded from Георгий Пименов
He interferes with my fortran evening😭😭😭
🥰72🍓1
Forwarded from Георгий Пименов
17🍓3
💯432
Forwarded from Fumo Jelly Froggie
10💯62
🤣8
😭22
never kill yourself
9🍓2