DXライブラリとGoogle V8 Javascript Engine を使ったプログラムを開発しているのですが、
10回に3,4回の割合で起動中にプログラムが停止します。
環境は、
[tab=30]MinGW + gcc 4.6.2
[tab=30]Windows Vista Home Basic
[tab=30]3GB RAM
[tab=30]プログラム起動成功時のプロセス使用メモリ量: 260MB
デバッガ(GDB)経由で起動した場合は今のところこの現象が確認できていません。
プログラムが停止するタイミングはまちまちなのですが、
起動時にスクリプト実行→画像ロード→スクリプト実行→画像ロードという手順が繰り返されている時のようです。
詳しくはまだチェックできていませんが、何度もメモリの確保をしている部分です。
また、しばしば Javascriptエンジンが "Allocation Failed" というエラーを出します。
原因は特定できていないのですが、今のところメモリの断片化によるアロケーション失敗を疑っています。
メモリの断片化について少し調べてみたのですが、
Windows環境において果たしてこのようなアロケーションの失敗が起こりうるのかがよく分かりません。
これだけの情報では判断が困難かと思いますが、
起動失敗の原因がメモリの断片化である可能性はあるのでしょうか?
よろしくお願いします。
メモリの断片化について
Re: メモリの断片化について
V8のことは知らないのですが…。
Javascriptのガベージコレクション対象のヒープが不足しているのではないでしょうか?
Javascriptで大きなアプリを作ったことはないので分かりませんが、
Javaだとかなり注意深く作らないと、OutOfMemoryで落ちたりとか、Full GCで数分間ハングアップしたように止まる現象も珍しくないです。
Javascriptのガベージコレクション対象のヒープが不足しているのではないでしょうか?
Javascriptで大きなアプリを作ったことはないので分かりませんが、
Javaだとかなり注意深く作らないと、OutOfMemoryで落ちたりとか、Full GCで数分間ハングアップしたように止まる現象も珍しくないです。
Re: メモリの断片化について
スクリプトエンジンまわりのデバッグをしていたところ、
スタックを破壊している部分が見つかり、そこを修正したら正常に作動するようになりました。
Allocation Failed のエラーは、スタックの破壊によってどこかでスクリプトが暴走したのかもしれません。
ともあれ、ありがとうございました。
スタックを破壊している部分が見つかり、そこを修正したら正常に作動するようになりました。
Allocation Failed のエラーは、スタックの破壊によってどこかでスクリプトが暴走したのかもしれません。
V8はGCの動作がかなり消極的なので、GCがボトルネックになることは少ないのではないかと思います。ISLe さんが書きました:V8のことは知らないのですが…。
Javascriptのガベージコレクション対象のヒープが不足しているのではないでしょうか?
ともあれ、ありがとうございました。