Я профилировал приложение Java и обнаружил, что распределение объектов происходит значительно медленнее, чем я ожидал.Я выполнил простой тест, пытаясь установить общую скорость выделения небольших объектов, и обнаружил, что выделение небольшого объекта (вектор из 3 поплавков), похоже, занимает около 200 наносекунд на моей машине.Я использую двухъядерный процессор с тактовой частотой 2,0 ГГц, так что это примерно 400 тактов процессора.Я хотел спросить здесь людей, которые профилировали приложения Java прежде, стоит ли ожидать такой скорости.Это кажется немного жестоким и необычным для меня.В конце концов, я бы подумал, что язык, подобный Java, который может сжимать кучу и перемещать объекты, будет иметь распределение объектов, которое будет выглядеть примерно так:
int obj_addr = heap_ptr;
heap_ptr += some_constant_size_of_object
return obj_addr;
...., который представляет собой пару строк сборки.Что касается сбора мусора, я не выделяю и не выбрасываю достаточно объектов, чтобы это вступило в игру.Когда я оптимизирую свой код путем повторного использования объектов, я получаю производительность порядка 15 наносекунд / объект, который мне нужно обрабатывать вместо 200 нс на объект, который мне нужно обрабатывать, поэтому повторное использование объектов значительно повышает производительность.Я действительно не хотел бы повторно использовать объекты, потому что это делает обозначение волосатым (многие методы должны принимать аргумент receptacle
вместо возврата значения).
Итак, вопрос в том, является ли этот объект нормальнымраспределение занимает так много времени?Или может быть что-то не так на моей машине, что после исправления может позволить мне иметь более высокую производительность на этом?Сколько времени обычно занимает выделение мелких объектов для других, и есть ли типичное значение?Я сейчас использую клиентскую машину и не использую флаги компиляции.Если на вашей машине все работает быстрее, какая у вас версия JVM и операционная система?
Я понимаю, что индивидуальный пробег может сильно различаться, когда речь идет о производительности, но я просто спрашиваю:упомянутое выше кажется, что они находятся в правильном поле.