【Groovy】Groovy 动态语言特性 ( Groovy 语言与 Java 语言执行效率对比 | 以动态特性编译的 Groovy 类 | 以静态特性编译的 Groovy 类 )
2023-09-14 09:07:29 时间
一、以动态特性编译的 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;
}
}
这是按照静态语言的方式编译的字节码文件 ;
相关文章
- Java实现 LeetCode 796 旋转字符串 (水题)
- Java实现 LeetCode 794 有效的井字游戏 (暴力分析)
- Java实现 LeetCode 530 二叉搜索树的最小绝对差(遍历树)
- Java实现 LeetCode 526 优美的排列(DFS)
- Java实现 LeetCode 337 打家劫舍 III(三)
- Java实现 LeetCode 136 只出现一次的数字
- Java实现 洛谷 P1328 生活大爆炸版石头剪刀布
- java实现第五届蓝桥杯奇怪的分式
- Java实现 蓝桥杯VIP 算法训练 黑色星期五
- Java实现蓝桥杯VIP 算法训练 sign函数
- (Java实现) N皇后问题
- (Java实现) 自然数的拆分
- java数据的5种存储位置(转)
- JAVA中,字符串STRING与STRINGBUILDER的效率差异
- JAVA中int与string互转的效率对比
- Java - 配置Java环境
- Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓 O725
- atitit groovy 总结java 提升效率
- 【蓝桥杯Java_C组·从零开始卷】第二节(附)、if与switch效率比较(千万次/一亿次)
- Java中StringBuilder与String的互相转换
- Java遇上SPL:架构优势和开发效率,一个不放过
- Java数字位数不足前面补0的几种办法
- frida打印class的信息--java反射
- 【华为OD机试 2023】核酸总最快检测效率(C++ Java JavaScript Python)
- 【 华为OD机试 2023】实力差距最小总和、最佳对手(C++ Java JavaScript Python)
- Java设计模式菜鸟系列(七)命令模式建模与实现
- java.io.FileNotFoundException关于使用Intellij Idea时系统找不到指定文件的解决方案、mysql8.0数据源连接配置
- 好用的Java工具类库大总结,提升开发效率必备