測者的測試技術筆記:揭開java method的一個祕密--巨型函數

測者的測試技術筆記:揭開java method的一個祕密--巨型函數

相信,不少人都不知道Java的Method的上限爲64K。本文將超過這個上限的函數叫作巨型函數。html

巨型函數的問題

一、若是代碼超過了這個限制,Java編譯器就報"Code too large to complier"的錯誤。 二、代碼並無超過64K的限制,可是在運行時因爲其餘工具或者library使得對應的代碼超過了64K的限制,那麼Java會給咱們一個java.lang.VerifyError的錯誤。java

巨型函數是怎麼來的

以下一些僅僅是一些可能致使出現巨型函數的常見狀況,還有不少其餘狀況就不一一列舉了。算法

一些工具生成的代碼

不少大函數並非人手動寫出來的,是一些代碼生成工具生成的,例如ANTLR(ANother Tool for language Recognition)就有可能生成巨大的Method。數組

初始化函數

Initialization方法就很容易變成巨型函數,尤爲是一些GUI的初始化函數,很容易在一個代碼段中塞進去不少對應的GUI的佈局定義代碼和attaching listener代碼,致使巨型函數的產生。函數

數組初始化

測者在工做中也碰見過static final 數組編譯器使用load或者sotre的指令初始化數組。這有時候也會致使出現巨型函數。工具

很長的JSP頁面

不少JSP的編譯器也會將全部的JSP代碼編譯到一個函數中,致使巨型函數的出現。佈局

如何解決巨型函數的問題

最好也是最根本的解決巨型函數的方法就是拆分。不管是代碼生成工具仍是JSP都容許咱們進行代碼的拆分。可是其餘一些例如調用第三方工具或者library致使的這個問題,不少時候就不能經過粗暴的代碼拆分解決問題了,須要從新設計,優化算法等方式避免巨型函數的出現。也有不少時候咱們沒有辦法避免巨型函數的64K限制,咱們最終的根本方法仍是寄但願於Java自身接觸64K的限制。測試

相關文章
相關標籤/搜索