文章目錄
- 一、以動態特性編譯的 Groovy 類
- 二、Groovy 語言與 Java 語言執行效率對比
- 三、以靜態特性編譯的 Groovy 類

一、以動態特性編譯的 Groovy 類
Groovy 類都實作了 GroovyObject 介面 , 如下面的 Groovy 類 ,
class Farmer {}
編譯后的位元組碼檔案內容如下 :
public class Farmer implements GroovyObject {
@Generated
public Farmer() {
CallSite[] var1 = $getCallSiteArray();
super();
MetaClass var2 = this.$getStaticMetaClass();
this.metaClass = var2;
}
@Generated
@Internal
public MetaClass getMetaClass() {
MetaClass var10000 = this.metaClass;
if (var10000 != null) {
return var10000;
} else {
this.metaClass = this.$getStaticMetaClass();
return this.metaClass;
}
}
@Generated
@Internal
public void setMetaClass(MetaClass var1) {
this.metaClass = var1;
}
}
二、Groovy 語言與 Java 語言執行效率對比
Groovy 語言實作了動態性 , 是以犧牲執行效率和性能為代價的 ;
執行相同時間復雜度的代碼 , 從消耗的時間上分析 , Groovy 語言是 Java 語言的幾倍 ;
三、以靜態特性編譯的 Groovy 類
在 Groovy 類上 , 使用 @CompileStatic 注解 ,
@CompileStatic
class Farmer {}
即可關閉動態特性 , 按照普通的 Java 類進行編譯 , 編譯出的位元組碼如下 :
public class Farmer implements GroovyObject {
@Generated
public Farmer() {
MetaClass var1 = this.$getStaticMetaClass();
this.metaClass = var1;
}
@Generated
@Internal
public MetaClass getMetaClass() {
MetaClass var10000 = this.metaClass;
if (var10000 != null) {
return var10000;
} else {
this.metaClass = this.$getStaticMetaClass();
return this.metaClass;
}
}
@Generated
@Internal
public void setMetaClass(MetaClass var1) {
this.metaClass = var1;
}
}
這是按照靜態語言的方式編譯的位元組碼檔案 ;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/413489.html
標籤:其他
上一篇:【Groovy】Groovy 動態語言特性 ( Groovy 中函式實參自動型別推斷 | 函式動態引數注意事項 )
