Эффективный СТРТОД в Java?

, поэтому у меня есть эта программа Java, которую я использую для Munk через несколько терабайт данных. Производительность является заботой.

Я профилировал приложение, и большая доля всех ассигнований памяти, а также большая часть времени процессора поступает от выполнения одной простой операции:

У меня есть массив ascio Chars. Я знаю, что персонажи от смещения I к компенсации j представляют номер с плавающей запятой. Мне нужно извлечь, что номер с плавающей точкой в ​​ двойной .

наивный Double.Parsedouble (новая строка (Buf, i, j - i)) делает работу. Тем не менее, именно здесь потрачено много времени, и многие распределения памяти приходят, вероятно, потому что:

  • новая строка () создает новый объект, создает внутреннюю CHAR [] [] множество и копирует персонажей в массив;
  • Double.Parsedouble () Создает объект FloatingDecimal , а также создает [] массив [] , также копирование персонажей в него.

Все эти ассигнования и все это копирование на самом деле не нужно. Могу ли я избегать их?

Что мне очень понравилось, это функция STRTOD , которая примет Char [] (или байт [] ) А также запуск / конец смещения и возврата двойной .

Любые предложения? Должен ли я катиться своим собственным? Должен ли я написать оболочку JNI вокруг Strtod ? Должен ли я использовать какую-то библиотеку Java, которая уже там?

5
задан NPE 7 September 2011 в 12:41
поделиться