問題(このソースについて) 現在のインデックスでは、130kbyteを超えたテキストを 扱うとメモリーが足りないとエラーが起こる。 そこで、ある一定以上メモリーを消費した場合には、ストレージ に一端データーを格納してあげることにする。 メモリーの監視方法とJAVAのVectorとLinkedListとarrayListと そしてガベージコレクションについて、少し調べなくては成らない だろう。 (keyword : HORB JAVA チャット)
○現在の設計 ○問題転 ○メモリーの監視方法 ○ガベージコレクターについて
上は あし,あしあと、いちご、いちじく を 保存した場合のデータの中身です。 n-Gramで単語を作成すると あ あし あしあ あしあと い いち いちご いちじ いちじく を単語として認識します() これらは IndexとIndexDataで実現しています。 単純にIndexDataないにVectorを保持もたせておき IndexDataがIndexDataを保持できるように作られています。
テキストを(1から10)−Gramで単語つくります。 テキストが120kbyte程度のものでも重くてメモリーに 乗り切らなくなります。 あとあとガベージコレクションについても少々 解決策として、ある一定以上メモリーを占有するように なったら、ストレージ上に対比して上げる。 または、IndexDataが一定以上になったらストレージ上に 保存してあげる
パッケージ java.lang.management を用いよう!!import java.lang.management.*; import java.util.*; public class MemMane { public static void main(String ags[]) { List<MemoryPoolMXBean> lis = ManagementFactory.getMemoryPoolMXBeans(); for(int i=0; i< lis.size();i++) { System.out.println( lis.get(i).getName() ); } } } を実行すると Code Cache Eden Space Survivor Space Tenured Gen Perm Gen Perm Gen [shared-ro] Perm Gen [shared-rw]と文字列を返します。 さてその意味は パフォーマンスチューニング と Tuning Garbage Collection with the 5.0 Java[tm] Virtual Machine を読もう
LinkedListは遅い。とても遅い。 ということで、考察します。 LinkedListもVectorも動的な配列です。 動的な配列は静的な配列とはことなり int dat[120]の120のように 配列の大きさを指定した場合、 静的な配列だと120以上のint 型のデータを保存することは出来 ませんが、 動的な配列は120以上の値を保存すること 出来ます。 大きさによらずに列データを扱うことが出来るのです。 リストはどのような構造をしているのか? Vectorの構造はどのようになっているか?
テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル