2006/06/20
Deep Call Stacks
Radium Software Development
JBoss 上で動いているウェブアプリのコールスタック(これはひどい...)。実際、オブジェクト指向の設計を忠実に推し進めていくと、委譲、委譲の連鎖でコール・スタックが深くなっていくことは避けられない。さらにそうやって設計された複数のフレームワークを組み合わせて使うことで、コール・スタックはどんどん深くなっていく。結果的に...こうなるというわけ。
もちろん、Java と JVM はこういう単純なメソッド呼び出しに最適化された構造になっており、ほとんどのメソッドは実行時にはインライン化されているはずなので、この深いコール・スタックがパフォーマンスの問題を引き起こしているとは考え難い。
しかし、エントリ内で指摘されている通り、「深いスタックフレームに対して,どうしても『危険な匂い』を感じずにはいられない」のは正しい反応だ。Java の世界ではごく普通になってしまったこのコール・スタック(と、そこに占めるビジネス・ロジックの割合)は、確かに異常な状態だと言えよう。
JBoss 上で動いているウェブアプリのコールスタック(これはひどい...)。実際、オブジェクト指向の設計を忠実に推し進めていくと、委譲、委譲の連鎖でコール・スタックが深くなっていくことは避けられない。さらにそうやって設計された複数のフレームワークを組み合わせて使うことで、コール・スタックはどんどん深くなっていく。結果的に...こうなるというわけ。
もちろん、Java と JVM はこういう単純なメソッド呼び出しに最適化された構造になっており、ほとんどのメソッドは実行時にはインライン化されているはずなので、この深いコール・スタックがパフォーマンスの問題を引き起こしているとは考え難い。
しかし、エントリ内で指摘されている通り、「深いスタックフレームに対して,どうしても『危険な匂い』を感じずにはいられない」のは正しい反応だ。Java の世界ではごく普通になってしまったこのコール・スタック(と、そこに占めるビジネス・ロジックの割合)は、確かに異常な状態だと言えよう。