met*_*ete 8 java exception class
我想知道java类的最大大小是多少.如此处所示http://docs.oracle.com/javase/specs/jvms/se5.0/html/ClassFile.doc.html#1546在Code属性结构中,代码长度指定为4字节,因此它是一大堆.我不明白的是异常表的pc属性是2个字节.如果代码长度超过2个字节但异常表只能解决2个字节,它怎么能工作?
所以,我偶然发现了这个,碰巧很无聊,所以我决定尝试一下。(在四核 Xeon MacPro 1,1 上运行 Java 1.6.0_26)
事实证明,至少 Eclipse 承认有一个限制,即一个方法中不能超过 65,535 个字节。但是,出于某种原因,这仅适用于 main 方法和构造函数方法,不适用于普通的类方法。一旦 main 和 constructor 方法低于 65K,代码就可以正常运行了。Eclipse 在处理如此大的方法时遇到了一些问题(100% cpu 几秒钟,错误图标鬼影会留在编辑器上),但代码实际上运行得很好。
我添加了 5 个额外的方法,它们都至少有 100K 的代码(主要是乱码 System.out.println("blah")),这些方法本身使用了一些参数,并返回了一个值。所以它们和我能做的一样“正常”。我尝试运行了几次,它们总是运行得很完美。
所以,似乎有 65K 的限制,但它绝对不是绝对类大小,而且它显然只适用于“特殊”方法,如 main 或构造函数方法。
但是,至少在我的情况下,更大的问题是 Eclipse 无法处理这些类型的文件。CPU 开始使用 100%,整个 IDE 有时似乎冻结。大多数时候,Eclipse 看起来只是在重新计算语法高亮 (!)。系统的其余部分至少在那段时间内是响应式的,我想这更多地是关于 OS X 而不是关于 Java。
当然,你为什么要接近这些极限是我无法理解的。理性和常识,如果不是面向对象的原则,应该在它接近 65K 之前早就解决了。但这是一个不错的实验,嘿,我学到了一些东西!
仅供参考,这是我测试的:
~> java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03-383-11A511)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02-383, mixed mode)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11736 次 |
| 最近记录: |