Apr 23, 2006

[Library] JExcelAPI にチャレンジ(5)

JEXCELAPI にチャレンジ(4)の続き。

JExcelAPI 実行時の GC を抑制する

どうやら JExcelAPI はガベージコレクションを強制的に実行するらしい。 ガベージコレクションにより CPU に負荷がかかりすぎる様であれば、下記の方法で抑制する。

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        WorkbookSettings settings = new WorkbookSettings();
        settings.setGCDisabled(true);
        WritableWorkbook book = Workbook.createWorkbook(baos, settings);

ガベージコレクションの状況

実際に WorkbookSettings#setGCDisabled でどの程度ガベージコレクションの頻度が変わるのかチェックしてみた。 適当なブックを作成するサンプルコードを -verbose:gc 付きで実行してみた結果。 ガベージコレクションを抑制しないとかなり FULL GC が実行されていることが分かる。 サーバなどで JVM に大量のメモリを割り当てている環境では注意が必要になりそう。

-verbose:gc

setGCDisabled(true) setGCDisabled(false)
[GC 512K->219K(1984K), 0.0037125 secs]
[GC 731K->213K(1984K), 0.0013843 secs]
[GC 725K->355K(1984K), 0.0025442 secs]
[GC 485K->355K(1984K), 0.0008825 secs]
[Full GC 355K->355K(1984K), 0.0185440 secs]
[GC 5987K->5482K(7108K), 0.0007786 secs]
[GC 5994K->5489K(7108K), 0.0010468 secs]
[GC 6001K->5494K(7108K), 0.0008387 secs]
[GC 6006K->5510K(7108K), 0.0014418 secs]
[GC 5819K->5602K(7108K), 0.0015913 secs]
[GC 5940K->5604K(7108K), 0.0007699 secs]
[GC 6116K->5607K(7108K), 0.0007481 secs]
[GC 6118K->5644K(7108K), 0.0021126 secs]
[GC 5870K->5654K(7108K), 0.0005934 secs]
[Full GC 5654K->460K(7108K), 0.0228395 secs]
[GC 5946K->5605K(7108K), 0.0003456 secs]
[GC 5946K->5606K(7108K), 0.0003162 secs]
[GC 6116K->5649K(7108K), 0.0006051 secs]
[GC 5685K->5653K(7108K), 0.0005341 secs]
[Full GC 5653K->460K(7108K), 0.0227604 secs]
[GC 5946K->5605K(6612K), 0.0003417 secs]
[GC 5941K->5607K(6612K), 0.0002489 secs]
[GC 6117K->5649K(6612K), 0.0004610 secs]
[GC 5685K->5653K(6612K), 0.0005034 secs]
[Full GC 5653K->454K(6612K), 0.0246984 secs]
[GC 5940K->5600K(9932K), 0.0007546 secs]
[GC 5939K->5601K(9932K), 0.0002735 secs]
[GC 6111K->5644K(9932K), 0.0005029 secs]
[GC 5682K->5647K(9932K), 0.0005302 secs]
[Full GC 5647K->454K(9932K), 0.0233284 secs]
[GC 5940K->5600K(7220K), 0.0003615 secs]
[GC 5936K->5601K(7220K), 0.0002601 secs]
[GC 6111K->5644K(7220K), 0.0007819 secs]
[GC 5682K->5647K(7220K), 0.0005554 secs]
[Full GC 5647K->454K(7220K), 0.0346614 secs]
[GC 5939K->5600K(7220K), 0.0003635 secs]
[GC 5938K->5601K(7220K), 0.0002766 secs]
[GC 6111K->5644K(7220K), 0.0004685 secs]
[GC 5682K->5647K(7220K), 0.0005615 secs]
[Full GC 5647K->454K(7220K), 0.0334269 secs]
[GC 5939K->5600K(7220K), 0.0003344 secs]
[GC 5938K->5601K(7220K), 0.0002590 secs]
[GC 6108K->5638K(7220K), 0.0005610 secs]
[GC 5687K->5648K(7220K), 0.0005389 secs]
[Full GC 5648K->455K(7220K), 0.0241341 secs]
[GC 5941K->5601K(7220K), 0.0003498 secs]
[GC 5938K->5602K(7220K), 0.0003266 secs]
[GC 6109K->5638K(7220K), 0.0004643 secs]
[GC 5688K->5649K(7220K), 0.0005397 secs]
[Full GC 5649K->456K(7220K), 0.0234329 secs]
[GC 5942K->5602K(7224K), 0.0008445 secs]
[GC 5940K->5603K(7224K), 0.0002972 secs]
[GC 6114K->5646K(7224K), 0.0004772 secs]
[GC 5684K->5649K(7224K), 0.0005274 secs]
[Full GC 5649K->457K(7224K), 0.0240489 secs]
[GC 5942K->5602K(7228K), 0.0003386 secs]
[GC 5938K->5604K(7228K), 0.0002643 secs]
[GC 6113K->5646K(7228K), 0.0004836 secs]
[GC 5684K->5650K(7228K), 0.0005246 secs]
[Full GC 5650K->457K(7228K), 0.0248289 secs]
[GC 5941K->5602K(7228K), 0.0003587 secs]
[GC 5940K->5604K(7228K), 0.0002548 secs]
[GC 6114K->5646K(7228K), 0.0004914 secs]
[GC 5684K->5650K(7228K), 0.0005420 secs]
[Full GC 5650K->456K(7228K), 0.0240072 secs]
[GC 5940K->5602K(7224K), 0.0003609 secs]
[GC 5939K->5603K(7224K), 0.0002562 secs]
[GC 6113K->5645K(7224K), 0.0004696 secs]
[GC 5683K->5649K(7224K), 0.0005280 secs]
[Full GC 5649K->456K(7224K), 0.0239544 secs]
[GC 5940K->5602K(7224K), 0.0003447 secs]
[GC 5939K->5603K(7224K), 0.0002523 secs]
[GC 6113K->5645K(7224K), 0.0004699 secs]
[GC 5683K->5649K(7224K), 0.0005327 secs]
[Full GC 5649K->456K(7224K), 0.0233776 secs]
[GC 5940K->5602K(7224K), 0.0004629 secs]
[GC 5939K->5603K(7224K), 0.0002674 secs]
[GC 6113K->5645K(7224K), 0.0004660 secs]
[GC 5683K->5649K(7224K), 0.0005395 secs]
[Full GC 5649K->456K(7224K), 0.0236684 secs]
[GC 5940K->5602K(7224K), 0.0003498 secs]
[GC 5939K->5603K(7224K), 0.0002699 secs]
[GC 6113K->5645K(7224K), 0.0004730 secs]
[GC 512K->219K(1984K), 0.0030713 secs]
[GC 731K->213K(1984K), 0.0013647 secs]
[GC 725K->355K(1984K), 0.0024732 secs]
[GC 485K->355K(1984K), 0.0009328 secs]
[Full GC 355K->355K(1984K), 0.0186873 secs]
[GC 5987K->5482K(7108K), 0.0014714 secs]
[GC 5994K->5489K(7108K), 0.0010350 secs]
[GC 6001K->5494K(7108K), 0.0008428 secs]
[GC 6006K->5510K(7108K), 0.0013708 secs]
[GC 5819K->5602K(7108K), 0.0016069 secs]
[GC 5940K->5604K(7108K), 0.0007275 secs]
[GC 6116K->5607K(7108K), 0.0007294 secs]
[GC 6118K->5644K(7108K), 0.0020734 secs]
[Full GC 5850K->5654K(7108K), 0.0233583 secs]
[GC 5676K->5654K(10196K), 0.0002358 secs]
[Full GC 5654K->460K(10196K), 0.0228359 secs]
[GC 6284K->5606K(10196K), 0.0003883 secs]
[Full GC 6142K->5619K(10196K), 0.0328980 secs]
[GC 5639K->5620K(10196K), 0.0002173 secs]
[Full GC 5620K->454K(10196K), 0.0228797 secs]
[GC 6279K->5601K(10196K), 0.0004512 secs]
[Full GC 6135K->5648K(10196K), 0.0234963 secs]
[GC 5666K->5648K(10196K), 0.0002104 secs]
[Full GC 5648K->454K(10196K), 0.0328841 secs]
[GC 6274K->5601K(10196K), 0.0003517 secs]
[Full GC 6135K->5619K(10196K), 0.0401814 secs]
[GC 5637K->5620K(10196K), 0.0002282 secs]
[Full GC 5620K->454K(10196K), 0.0338029 secs]
[GC 6276K->5601K(10196K), 0.0003730 secs]
[Full GC 6134K->5648K(10196K), 0.0235197 secs]
[GC 5665K->5648K(10196K), 0.0002112 secs]
[Full GC 5648K->454K(10196K), 0.0232991 secs]
[GC 6275K->5601K(10196K), 0.0006495 secs]
[Full GC 6135K->5619K(10196K), 0.0410946 secs]
[GC 5637K->5620K(10196K), 0.0002313 secs]
[Full GC 5620K->454K(10196K), 0.0235823 secs]
[GC 6276K->5601K(10196K), 0.0003721 secs]
[Full GC 6143K->5648K(10196K), 0.0371251 secs]
[GC 5666K->5649K(10196K), 0.0002836 secs]
[Full GC 5649K->455K(10196K), 0.0232323 secs]
[GC 6278K->5602K(10196K), 0.0003699 secs]
[Full GC 6142K->5621K(10196K), 0.0310796 secs]
[GC 5638K->5621K(10196K), 0.0002299 secs]
[Full GC 5621K->456K(10196K), 0.0236888 secs]
[GC 6277K->5603K(10196K), 0.0005277 secs]
[Full GC 6137K->5649K(10196K), 0.0237972 secs]
[GC 5667K->5650K(10196K), 0.0002115 secs]
[Full GC 5650K->456K(10196K), 0.0231585 secs]
[GC 6276K->5603K(10196K), 0.0003615 secs]
[Full GC 6135K->5621K(10196K), 0.0310106 secs]
[GC 5638K->5621K(10196K), 0.0002330 secs]
[Full GC 5621K->456K(10196K), 0.0243056 secs]
[GC 6277K->5603K(10196K), 0.0003727 secs]
[Full GC 6137K->5649K(10196K), 0.0243352 secs]
[GC 5667K->5650K(10196K), 0.0002106 secs]
[Full GC 5650K->456K(10196K), 0.0239634 secs]
[GC 6276K->5603K(10196K), 0.0006238 secs]
[Full GC 6135K->5621K(10196K), 0.0313233 secs]
[GC 5638K->5621K(10196K), 0.0002310 secs]
[Full GC 5621K->456K(10196K), 0.0241263 secs]
[GC 6277K->5603K(10196K), 0.0003755 secs]
[Full GC 6136K->5649K(10196K), 0.0241584 secs]
[GC 5667K->5650K(10196K), 0.0002148 secs]
[Full GC 5650K->456K(10196K), 0.0233303 secs]
[GC 6276K->5603K(10196K), 0.0003743 secs]
[Full GC 6136K->5621K(10196K), 0.0304924 secs]
[GC 5638K->5621K(10196K), 0.0002355 secs]
[Full GC 5621K->456K(10196K), 0.0235848 secs]
[GC 6276K->5603K(10196K), 0.0005327 secs]
[Full GC 6136K->5649K(10196K), 0.0246543 secs]

-verbose:gc -Xmn16m

setGCDisabled(true) setGCDisabled(false)
[GC 10740K->455K(16192K), 0.0067553 secs]
[GC 13198K->455K(16192K), 0.0033887 secs]
[GC 13310K->455K(16192K), 0.0031920 secs]
[GC 13194K->455K(16192K), 0.0032965 secs]
[GC 13188K->456K(16192K), 0.0032487 secs]
[GC 13231K->456K(16192K), 0.0032934 secs]
[GC 13218K->456K(16192K), 0.0033169 secs]
[Full GC 10740K->5620K(16192K), 0.0376690 secs]
[Full GC 12104K->5625K(16192K), 0.0320728 secs]
[Full GC 12050K->5651K(16192K), 0.0320968 secs]
[Full GC 12031K->5619K(16192K), 0.0346910 secs]
[Full GC 11985K->5630K(16192K), 0.0324041 secs]
[Full GC 12034K->5639K(16192K), 0.0324170 secs]
[Full GC 12040K->5649K(16192K), 0.0326779 secs]
[Full GC 12043K->5621K(16192K), 0.0340462 secs]
[Full GC 11999K->5630K(16192K), 0.0329092 secs]
[Full GC 11992K->5635K(16192K), 0.0330936 secs]
[Full GC 12009K->5636K(16192K), 0.0325304 secs]
[Full GC 11999K->5621K(16192K), 0.0325377 secs]
[Full GC 11992K->5630K(16192K), 0.0431563 secs]
[Full GC 12000K->5638K(16192K), 0.0337579 secs]
[Full GC 12001K->5646K(16192K), 0.0353190 secs]