Java 测者的测试技术手册:揭开 java method 的一个秘密--巨型函数

CrissChan · 2018年12月18日 · 最后由 陈恒捷 回复于 2018年12月18日 · 1082 次阅读

揭开 java method 的一个秘密:巨型函数

相信,很多人都不知道 Java 的 Method 的上限为64K。本文将超过这个上限的函数叫做巨型函数。

巨型函数的问题

1、如果代码超过了这个限制,Java 编译器就报"Code too large to complier"的错误。
2、代码并没有超过 64K 的限制,但是在运行时由于其他工具或者 library 使得对应的代码超过了 64K 的限制,那么 Java 会给我们一个 java.lang.VerifyError 的错误。

巨型函数是怎么来的

如下一些仅仅是一些可能导致出现巨型函数的常见情况,还有很多其他情况就不一一列举了。

一些工具生成的代码

很多大函数并不是人手动写出来的,是一些代码生成工具生成的,例如 ANTLR(ANother Tool for language Recognition)就有可能生成巨大的 Method。

初始化函数

Initialization 方法就很容易变成巨型函数,尤其是一些 GUI 的初始化函数,很容易在一个代码段中塞进去很多对应的 GUI 的布局定义代码和 attaching listener 代码,导致巨型函数的产生。

数组初始化

测者在工作中也遇见过 static final 数组编译器使用 load 或者 sotre 的指令初始化数组。这有时候也会导致出现巨型函数。

很长的 JSP 页面

很多 JSP 的编译器也会将所有的 JSP 代码编译到一个函数中,导致巨型函数的出现。

如何解决巨型函数的问题

最好也是最根本的解决巨型函数的方法就是拆分。无论是代码生成工具还是 JSP 都允许我们进行代码的拆分。但是其他一些例如调用第三方工具或者 library 导致的这个问题,很多时候就不能通过粗暴的代码拆分解决问题了,需要重新设计,优化算法等方式避免巨型函数的出现。也有很多时候我们没有办法避免巨型函数的 64K 限制,我们最终的根本方法还是寄希望于 Java 自身接触 64K 的限制。

关注测者,关注测试

共收到 1 条回复 时间 点赞

让我想起以前 android 单个 class 文件里的方法数的限制。

需要 登录 後方可回應,如果你還沒有帳號按這裡 注册