Продолжается подписка на наши издания! Вы не забыли подписаться?

Развенчание мифов о производительности сборщиков мусора в Java

Автор: Brian Goetz
Principal Consultant, Quiotix
Опубликовано: 27.02.2006

Язык Java подвергается многим нареканиям за производительность. Некоторые из них, возможно, вполне заслужены. Однако посещение Internet-форумов, посвященных Java, показывает, что просто многие не понимают, как именно работает Java Virtual Machine (JVM). В колонке этого месяца Brian Goetz разоблачает некоторые распространенные мифы о медлительности распределения памяти в Java.

Какой язык быстрее в размещении памяти – Java или C++? Ответ может удивить – распределение памяти в современных JVM гораздо быстрее, чем наиболее производительные реализации malloc. Исполнение кода new Object() в HotSpot 1.4.2 и более поздних версиях занимает около 10 машинных инструкций (по данным Sun), а наиболее производительные реализации malloc в С требуют от 60 до 100 инструкций на вызов. А ведь распределение памяти – не мелкий компонент общей производительности. Тесты показывают, что некоторые реальные C/C++-программы, например, Perl или Ghostscript, проводят от 20 до 20 процентов общего времени исполнения в malloc и free – это куда больше, чем затраты на распределение памяти и сборку мусора в нормальных Java-приложениях.

Начало путаницы

Вам не придется перерывать кучу блогов или форумов, чтобы отыскать утверждения типа: "Сборка мусора никогда не станет столь же эффективной, как прямое управление памятью". И, кстати, эти заявления – чистая правда. Динамическое управление памятью не такое же быстрое – оно часто гораздо быстрее. Подход malloc/free работает с одним блоком памяти за раз, а сборка мусора старается работать с большими кусками, что дает больше возможностей для оптимизации (ценой некоторого снижения предсказуемости)...

........................

Заключение

JVM удивительно хорошо делают вещи, которые раньше были полностью отданы на откуп разработчику. Позволяя JVM выбирать между выделением памяти в куче и в стеке, можно получить преимущества производительности выделения памяти в стеке, не заставляя программиста мучаться с выбором.

........................
"С полным содержанием данной статьи можно ознакомиться в печатной версии журнала"

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

Copyright © 1994-2016 ООО "К-Пресс"