javaでextendsの階層を深くしまくったらどうなるか? 理論的な裏付けは特に行わず、とりあえずやってみたら何が起きるか、を見る。
環境
- java version "16" 2021-03-16
やったこと
こんな感じでひたすらextends
を重ねるクラスを生成し、コンパイルして実行してみる。
class A1 extends Object { public void m() { System.out.println("A1"); } } class A2 extends A1 { public void m() { System.out.println("A2"); super.m(); } } //...(省略) public class Main { public static void main(String[] args) { new A100().m(); } }
extends
が200で以下のようにStackOverflowError
となった。末尾最適利かないだろうから結果としては至極当然といったところか。
> java a.Main Exception in thread "main" java.lang.StackOverflowError at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1010) at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:855)
コンパイル時間は500で1分強、1000で数分。一気に60000は全く終わる気配が無くて途中であきらめた。
実行時間は、上記の事情があるので100しか試していないが、特に早いとか遅いとかは無かった。