刚开始学groovy,知道了它会先变异成class 文件,然后再用jvm 执行。写了Hello World程序,查看它的编译文件,发现groovy的效率挺低的。不但编译文件的代码多,而且需要依赖很多groovy包,导致了不能够直接使用java 命令运行class文件

比较如下:

Java版Hello World,JavaTest.java

public class JavaTest {
public static void main(String[] args){
System.out.println("Hello World!");
}
}

编译后:JavaTest.class

public class JavaTest {
public JavaTest() {
} public static void main(String[] args) {
System.out.println("Hello World!");
}
}

Groovy版Hello World,GroovyTest.groovy

GroovyTest.groovy
class GroovyTest {
static void main(args){
println "Hello World!";
}
}

编译后:GroovyTest.class

import groovy.lang.GroovyObject;
import groovy.lang.MetaClass;
import org.codehaus.groovy.runtime.callsite.CallSite; public class GroovyTest implements GroovyObject {
public GroovyTest() {
CallSite[] var1 = $getCallSiteArray();
MetaClass var2 = this.$getStaticMetaClass();
this.metaClass = var2;
} public static void main(String... args) {
CallSite[] var1 = $getCallSiteArray();
var1[0].callStatic(GroovyTest.class, "Hello World!");
}
}

Groovy 升级版,GroovyTest.groovy

println("Hello World");

编译后:GroovyTest.class

import groovy.lang.Binding;
import groovy.lang.Script;
import org.codehaus.groovy.runtime.InvokerHelper;
import org.codehaus.groovy.runtime.callsite.CallSite; public class GroovyTest extends Script {
public GroovyTest() {
CallSite[] var1 = $getCallSiteArray();
} public GroovyTest(Binding context) {
CallSite[] var2 = $getCallSiteArray();
super(context);
} public static void main(String... args) {
CallSite[] var1 = $getCallSiteArray();
var1[0].call(InvokerHelper.class, GroovyTest.class, args);
} public Object run() {
CallSite[] var1 = $getCallSiteArray();
return var1[1].callCurrent(this, "Hello World");
}
}

越高级的语言,封装的越多,开发简单效率低
越底层的语言,封装的越少,开发复杂效率高
所以如果追求效率的话,还是使用Java代码的好。

groovy的效率问题的更多相关文章

  1. 新学习的语言Groovy

    什么是 Groovy? Groovy 是 JVM 的一个替代语言 —替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同.在编写新应用 ...

  2. atitit groovy 总结java 提升效率

    atitit groovy 总结java 提升效率 #---环境配置 1 #------安装麻烦的 2 三.创建groovy项目 2 3.  添加 Groovy 类 2 4.  编译运行groovy类 ...

  3. Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓 O725

    Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓  O725 1. DSL主要分为三类:外部DSL.内部DSL,以及语言工作台. 1 2. DSL ...

  4. Groovy安装配置

    一.介绍 Groovy是可以运行在 Java 平台上进行动态语言,使用方式基本与使用 Java 的方式相同,Groovy和java基本是可以实现无缝整合,它有以下一些特性: 是一个基于Java虚拟机的 ...

  5. 编写爬虫程序的神器 - Groovy + Jsoup + Sublime

    写过很多个爬虫小程序了,之前几次主要用C# + Html Agility Pack来完成工作.由于.NET BCL只提供了"底层"的HttpWebRequest和"中层& ...

  6. Groovy在不同JDK版本下的性能差异

    Groovy作为一种动态语言,性能和JAVA比肯定是差不少,根据网友的测试,由于测试环境,场景和编译参数的不同,大概有差2到7倍的差距 那么同样的Groovy,在不同的JDK版本下,会有着怎样的差异呢 ...

  7. Groovy中那些神奇注解之Memoized

    临近年关手头比较闲,去看了一下Groovy的官方文档,才发现原来Groovy中带了那么多的注解,很多注解带来的效果,有时候让人感觉“这不是在变魔法吧”. 个人很喜欢Groovy,写不成Ruby,Gro ...

  8. 编写爬虫程序的神器 - Groovy + Jsoup + Sublime(转)

    写过很多个爬虫小程序了,之前几次主要用C# + Html Agility Pack来完成工作.由于.NET FCL只提供了"底层"的HttpWebRequest和"中层& ...

  9. Groovy - 介绍

    Groovy 是 用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言.使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的 ...

随机推荐

  1. Python_每日习题_0006_斐波那契数列

    程序设计: 斐波那契数列(Fibonacci sequence),从1,1开始,后面的每一项等于前面两项之和. 图方便就递归实现,图性能就用循环. # for 循环 target = int(inpu ...

  2. 2018 Multi-University Training Contest 2

    题目链接:2018 Multi-University Training Contest 2 6318 Swaps and Inversions 题意:sum=x*逆序个数+交换次数*y,使sum最小 ...

  3. Python学习第十二篇——切片的使用

    Python中使用函数切片可以创建副本,保留原本.现在给出如下代码 magicians_list = ['mole','jack','lucy'] new_lists = [] def make_gr ...

  4. 阿里云服务器使用镜像市场上的环境以后sql不能远程问题

    关于阿里云的服务器,首先要说的就是买了以后是没有环境的,什么都需要自己配置,也是在这个上面栽了很多跟头最后去的镜像市场买的一个IIS8+SQL2016的asp.net环境 怎么说呢,感觉有些问题的本源 ...

  5. JavaScript中防止重复提交

    有这么一种情况: 页面有一个按钮,点击之后会触发Ajax请求,但是用户在点击之后,不知道是否点成功了,于是又点了一下,如果不加处理的话,就会进行两次Ajax请求,并且请求的数据都是一样的,对后端的程序 ...

  6. Linux watchdog

    使用 watchdog 构建高可用性的 Linux 系统及应用https://www.ibm.com/developerworks/cn/linux/l-cn-watchdog/index.html ...

  7. Hibernate two table same id

    Hibernate更新数据(不用update也可以) - 森林木马 - 博客园 https://www.cnblogs.com/owenma/p/3481497.html hibernate级联更新会 ...

  8. nginx之快速查找配置文件

    nginx的配置放在nginx.conf文件中,一般我们可以使用以下命令查看服务器中存在的nginx.conf文件.   locate nginx.conf /usr/local/nginx/conf ...

  9. fiddler查看IP地址和请求响应时间

    (一)fiddler查看IP地址 1.点击菜单栏rules——customize rules… 2.ctrl+f搜索“static function main” 3.在main函数里加入下面一行代码, ...

  10. Hbase的作用

    实时动态增加列 多版本的意思为多个用户地址,多个用户信息,多个用户号码