相信,很多人都不知道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的限制。
文章仅作为分享
|