サイト内を検索:
SQS

日々是開発:SQS Development

トップ «前の日記(2009-08-15) 最新 編集


2009-08-21

[oss] FOP: 前方参照でのOutOfMemoryExceptionを回避する方法:Caching of pages with forward references

FOPでは、ページのフッタに「Page 1 of 10」のような表記をすることができる。この「10」という数字は「総ページ数」を表しているので、全部のページをレンダリングし終えてみなければ得ることができない。こういう「総ページ数」のようなものを挿入するためのしくみは、「前方参照(forward reference)」と呼ばれている。

未解決の前方参照を抱えている場合には、レンダリング中の内容はずっとメモリ上に置かれたままになる。そのため、参照の行われたページ位置と参照内容の決定がなされるページ位置の間が離れている場合には、どこかでOutOfMemoryException を吐いてしまう可能性に備えなければならない。感覚的には、レンダリングするページ数8ページあたり256MB程度のヒープ設定が必要といった感じ。実際、SQS SourceEditorでは、ヒープサイズを32MBにしたままでは、わずか数ページのレンダリングでもOutOfMemoryExceptionになってしまう。

さて。Re: Caching of pages with forward referencesには、AreaTreeHandlerのサブクラスを作り、そのコンストラクタの中で、org.apache.fop.area.CachedRenderPagesModel というクラスをインスタンス化して、通常のRenderPagesModelの代わりにsetModelするというコードが示されている。こうすることで、前方参照があっても、OutOfMemoryExceptionになってしまう状況を避けることができるようになるらしい!ただし、これは、ページシーケンスが一定以下のサイズの文書をレンダリングするときにのみ有効。ページシーケンスに大きなものがある文書では依然としてOutOfMemoryExceptionとなる場合を避けられないとのことである。

[]


トップ «前の日記(2009-08-15) 最新 編集
Categories: announce | bug | case | clip | dev | diary | faq | hardware | linux | oss | prj | ref | thesis | todo
最近のツッコミ:
  1. hiroya (09-08-08)
  2. hiroya (09-08-08)
  3. yone (09-08-07)
過去の日記

[RDF|LIRS] あわせて読みたい
(テクノラティプロフィール) テクノラティお気に入りに追加する