, поэтому у меня есть эта программа Java, которую я использую для Munk через несколько терабайт данных. Производительность является заботой.
Я профилировал приложение, и большая доля всех ассигнований памяти, а также большая часть времени процессора поступает от выполнения одной простой операции:
У меня есть массив ascio Chars. Я знаю, что персонажи от смещения I
к компенсации j
представляют номер с плавающей запятой. Мне нужно извлечь, что номер с плавающей точкой в двойной
.
наивный Double.Parsedouble (новая строка (Buf, i, j - i))
делает работу. Тем не менее, именно здесь потрачено много времени, и многие распределения памяти приходят, вероятно, потому что:
новая строка ()
создает новый объект, создает внутреннюю CHAR [] []
множество
и копирует персонажей в массив; Double.Parsedouble ()
Создает объект FloatingDecimal
, а также создает [] массив []
,
также копирование персонажей в него. Все эти ассигнования и все это копирование на самом деле не нужно. Могу ли я избегать их?
Что мне очень понравилось, это функция STRTOD
, которая примет Char []
(или байт []
) А также запуск / конец смещения и возврата двойной
.
Любые предложения? Должен ли я катиться своим собственным? Должен ли я написать оболочку JNI вокруг Strtod
? Должен ли я использовать какую-то библиотеку Java, которая уже там?