Информация об изменениях

Сообщение Re[67]: gc vs умелые руки от 22.10.2016 15:52

Изменено 22.10.2016 15:55 vdimas

Здравствуйте, ·, Вы писали:

·>Во как. Ты оказывается имел в виду не "хип GC" (чтобы это не значило), а область (area, generation) кучи.


Я имел ввиду именно другую кучу, в точности аналогичной нейтивной.

Я вижу, что у тебя затык на самом слове "куча", хотя это слово интуитивно понятно, ИМХО.
"Кучей" в менеджере памяти физически является набор страниц, взятый у операционки.
Дефолтный менеджер нейтивной кучи в виндах живет в Kernel32.dll, в линухах он живет в glibc.so.


·>И что ты хотел сказать-то этим?


Что большие объекты (т.е. память под них) обрабатываются джавовским GC по-другому, а именно — в точности как нейтивные.


V>>·>Нет никаких "обычных куч" в Яве. Есть только Java Heap. И все объекты живут именно там, независимо от размера.

V>>Это не так.
·>Это так. RTFM: https://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/geninfo/diagnos/garbage_collect.html

Именно что RTFM, потом спорь.
По твоей ссылке нет противоречий моим словам.


V>>·>Бывает off-heap подход, но это не об объектах и их размерах, а по сути это просто in memory database. И off-heap как раз используется для хранения данных огромного кол-ва _мелких_ объектов.

V>>>>Чем куча GC отличается от обычной?
V>>·>Откуда я знаю что такое "обычная куча", этот термин ты придумал.
V>>Этому термину больше лет чем тебе.
·>Ну какая разница когда ты его придумал.

Придумываешь тут только ты от незнания.


V>>·>Скажем, в zing куча операционки может не использоваться, и там есть ядрённый модуль, который выделяет Java-кучу прямо в физической памяти.

V>>А бывает как-то иначе? ))
·>Бывает.

Не бывает. ))
У операционки с защищённой памятью всегда аллоцируется сначала адресное пространство, а потом коммитится, по мере надобности, её отображение на физическую память.


V>>Ясно, понятий ровно ноль.

V>>В обычной куче есть только две операции — выделение и освобождение памяти.
·>Можно ссылку на понятие "обычная куча"?

https://msdn.microsoft.com/en-us/library/windows/desktop/aa366599(v=vs.85).aspx



V>>В куче GC дополнительно есть операции перемещения объектов, с целью уплотнения (дефрагментации).

·>GC и дефрагментация вещи ортогональные.

Для Джавы и дотнета они неразрывные.


V>>Так вот, основной профит от GC как раз в этой дефрагментации, иначе не получится затем выделять память простым инкрементом указателя. Но эта фишка не работает для больших объектов, бо они выделяются в тех областях памяти, где дефрагментация не производится.

·>Как эти области памяти называются? Ссылку плз.
·>Ты наверное путаешь с dotnet LOH, там да, есть какие-то особенности.

Я ничего не путаю и в LOH никаких особенностей нет, — это обычная куча как куча, которая в современных менеджерах памяти представлена деревом на основе бинарного представления части адреса объекта. Просто конкретно MS дала этой куче название в своей реализации GC, чтобы как-то отделить, сугубо терминологически, её от основной кучи GC.
Re[67]: gc vs умелые руки
Здравствуйте, ·, Вы писали:

·>Во как. Ты оказывается имел в виду не "хип GC" (чтобы это не значило), а область (area, generation) кучи.


Я имел ввиду именно другую кучу, в точности аналогичной нейтивной.

Я вижу, что у тебя затык на самом слове "куча", хотя это слово интуитивно понятно, ИМХО.
"Кучей" в менеджере памяти физически является набор страниц, взятый у операционки.
Дефолтный менеджер нейтивной кучи в виндах живет в Kernel32.dll, в линухах он живет в glibc.so.


·>И что ты хотел сказать-то этим?


Что большие объекты (т.е. память под них) обрабатываются джавовским GC по-другому, а именно — в точности как нейтивные.


V>>·>Нет никаких "обычных куч" в Яве. Есть только Java Heap. И все объекты живут именно там, независимо от размера.

V>>Это не так.
·>Это так. RTFM: https://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/geninfo/diagnos/garbage_collect.html

Именно что RTFM, потом спорь.
По твоей ссылке нет противоречий моим словам.


V>>·>Бывает off-heap подход, но это не об объектах и их размерах, а по сути это просто in memory database. И off-heap как раз используется для хранения данных огромного кол-ва _мелких_ объектов.

V>>>>Чем куча GC отличается от обычной?
V>>·>Откуда я знаю что такое "обычная куча", этот термин ты придумал.
V>>Этому термину больше лет чем тебе.
·>Ну какая разница когда ты его придумал.

Придумываешь тут только ты от незнания.


V>>·>Скажем, в zing куча операционки может не использоваться, и там есть ядрённый модуль, который выделяет Java-кучу прямо в физической памяти.

V>>А бывает как-то иначе? ))
·>Бывает.

Не бывает. ))
У операционки с защищённой памятью всегда аллоцируется сначала адресное пространство, а потом коммитится, по мере надобности, её отображение на физическую память.


V>>Ясно, понятий ровно ноль.

V>>В обычной куче есть только две операции — выделение и освобождение памяти.
·>Можно ссылку на понятие "обычная куча"?

https://msdn.microsoft.com/en-us/library/windows/desktop/aa366599(v=vs.85).aspx



V>>В куче GC дополнительно есть операции перемещения объектов, с целью уплотнения (дефрагментации).

·>GC и дефрагментация вещи ортогональные.

Для Джавы и дотнета они неразрывные.


V>>Так вот, основной профит от GC как раз в этой дефрагментации, иначе не получится затем выделять память простым инкрементом указателя. Но эта фишка не работает для больших объектов, бо они выделяются в тех областях памяти, где дефрагментация не производится.

·>Как эти области памяти называются? Ссылку плз.
·>Ты наверное путаешь с dotnet LOH, там да, есть какие-то особенности.

Я ничего не путаю и в LOH никаких особенностей нет, — это обычная куча как куча, которая в современных менеджерах памяти представлена деревом на основе бинарного представления части адреса объекта. Просто конкретно MS дала этой куче название в своей реализации GC, чтобы как-то отделить, сугубо терминологически, её от основной кучи GC.

Upd
Про дотнет пишут то же, что и про джаву, кста:

Any allocation greater than or equal to 85,000 bytes goes on the LOH. Copying large objects has a performance penalty, so the LOH is not compacted unlike the SOH. Another defining characteristic is that the LOH is only collected during a generation 2 collection.


В точности аналогично, кароч, и лично мне здесь не видится ничего удивительного.