1

Java 言語を使用して、数値を含むテキスト ファイルを読みました。数テラバイトのデータと数千億の数値があります。

目標は、データをできるだけ速く取得し、GC アクティビティを最小限に抑えることです。テキストをプリミティブ (double、float、int) に直接解析したい。

直接私は意味します:

  • 一時的なヘルパー オブジェクトをインスタンス化せずに
  • java.lang.Double、java.lang.Float... でデータをボックス化せずに
  • 一時的な java.lang.String インスタンスを作成せずに (JDK Double.parseDouble(...) を呼び出す場合は必須の手順)

これまでのところ、javolution フレームワークを使用してきました。

double javolution.text.TypeFormat.parseDouble(CharSequence sequence);

javolution コードを調べたところ、実際には一時的なオブジェクトが割り当てられていません。また、CharSequence を受け入れるため、一時的な文字列をインスタンス化することなく、データ ファイルからデコードされた文字を表示できます。

代替手段またはより良い方法はありますか?

4

2 に答える 2

2

このメソッドDouble.parseDouble(String) 内部でオブジェクトをインスタンス化しますが、キャッシングを使用して、文字列から二重読み取りを返します。
この回答は詳細を提供します。

残りの部分については、Javolutionパッケージはリアルタイム パフォーマンス用に作成されているようで、適切なパッケージのようです。

于 2012-12-06T11:21:45.827 に答える
1

StreamTokenizer、ここで調べて、プロファイリングする価値があるかもしれません。10進数をとして解析しますが、科学的記数法は処理doubleしません。

于 2012-12-06T11:32:45.160 に答える