LINUX.ORG.RU

Правда ли что Java плохо работает с памятью?


0

0

Насколько я знаю по тестам на время переключения потоков жаба отстаёт от Си программы на 20% что в общем не катастрофа. Но вот не давно услышал мнение, что на тестах активного выделени/освобождения памяти жаба плохо работает, т.е. медленно. Например для зачач работы с деревьями и др. Это правда или разаработчики жабы предлагают решение это проблемы (если она есть)?

anonymous

йава прекрасно работает на тестах ативного быделения/освобождения памяти только лишь по той причине, что она нифига не освобождает. gc начнет более-менее шевелить рогом, только когда весь выделенный хип забьется мусором. это не особо плохо, но и ничего хорошего тоже нет.

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

>> быделения/освобождения

Быдление памяти
Быдлить память
Сборщик забыдленной памяти
...
Что в этом есть... жавовское...

cathode
()

Насколько знаю, Java наоборот быстрее выделяет память, т.к. не использует для выделения памяти под объекты системные вызовы, т.о. переключение kernel - user space на каждый чих не делается.

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

> т.к. не использует для выделения памяти под объекты системные вызовы

IIRC malloc тоже так не делает - glibc не лазит в ядро за каждым куском памяти.

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

IIRC так не делают как минимум со времён Кернигана и Ричи. Относительно кого мерялось тут:

> Java наоборот быстрее выделяет память

остаётся неясным.

anonymous
()
Ответ на: комментарий от svu

> IIRC malloc тоже так не делает - glibc не лазит в ядро за каждым куском памяти.

То есть оно не дергает каждый раз sbrk? А как тогда, объясни, плз.

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

Не каждый ясно когда: p = malloc(1023); /* brk */ free (p); malloc (1023); /* allocated */

Другое дело, что сам brk просто так не утаптывает адресное пространство назад. При больших объёмах выделений памяти используется mmap.

P.S.: сам не шарю, но наслышан :)

anonymous
()

С памятью жаба работает хорошо. Без памяти - плохо.

anonymous
()
Ответ на: комментарий от svu

Основное отличие — в С хип фрагментируется, поэтому надо как то этим всем управлять, например держать связный список свободных участков памяти. Значит выделение памяти неизбежно связано с накладными расходами поиска свободного участка.

А в джаве память всегда выделяется непрерывно, и при очередной полной сборке мусора смещается в начало. Поэтому выделение памяти там буквально 2-3 машинных инструкции. Усложнение вносят потоки, но не принципиальное.

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

2all: Я правильно понимаю, что жаба должна быстрее работаь с памятью чес Си или по крайней мере не намного медленнее?

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

2Legioner
Всё далеко не так просто. Дефрагментация - тяжёлая вещь. Вообразите себе, что это делается при каждой сборке мусора при размере кучи в, скажем, 1 Gb.

Вот бумага, описывающая, как обстоят дела с GC в Sun JVM:

http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html

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