Java groovy如何提升代码运行效率

 更新时间:2020年09月24日 10:45:47   作者:贾树丙  
这篇文章主要介绍了Java groovy如何提升代码运行效率,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

刚开始学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代码的好。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 关于Mybatis-Plus Wrapper是否应该出现在Servcie类中

    关于Mybatis-Plus Wrapper是否应该出现在Servcie类中

    最近在做代码重构,代码工程采用了Controller/Service/Dao分层架构,Dao层使用了Mybatis-Plus框架,本文带领大家学习Mybatis-Plus Wrapper应该出现在Servcie类中吗,需要的朋友可以参考下
    2023-05-05
  • Java中的线程池ThreadPoolExecutor深入解析

    Java中的线程池ThreadPoolExecutor深入解析

    这篇文章主要介绍了Java中的线程池ThreadPoolExecutor深入解析,线程池,thread pool,是一种线程使用模式,线程池维护着多个线程,等待着监督管理者分配可并发执行的任务,需要的朋友可以参考下
    2023-11-11
  • tomcat301与java301解析

    tomcat301与java301解析

    这篇文章主要介绍了omcat301与java301,有需要的朋友可以参考一下
    2014-01-01
  • 使用@PathVariable接收两个参数

    使用@PathVariable接收两个参数

    这篇文章主要介绍了使用@PathVariable接收两个参数的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Spring Boot 自动配置之条件注解浅析

    Spring Boot 自动配置之条件注解浅析

    这篇文章主要介绍了Spring Boot 自动配置之条件注解浅析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • Java实现限流接口的示例详解

    Java实现限流接口的示例详解

    限流是对某一时间窗口内的请求数进行限制,保持系统的可用性和稳定性,防止因流量暴增而导致的系统运行缓慢或宕机,本文主要来和大家聊聊如何使用java实现限流接口,感兴趣的可以了解下
    2023-12-12
  • SpringBoot常见问题小结

    SpringBoot常见问题小结

    这篇文章主要介绍了SpringBoot常见问题小结,需要的朋友可以参考下
    2017-07-07
  • SpringBoot实现文件上传功能

    SpringBoot实现文件上传功能

    这篇文章主要为大家详细介绍了SpringBoot实现文件上传功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Java数据结构之图的原理与实现

    Java数据结构之图的原理与实现

    图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。本文将详细介绍图的原理及其代码实现,需要的可以参考一下
    2022-01-01
  • Java剑指offer之删除链表的节点

    Java剑指offer之删除链表的节点

    这篇文章主要介绍了Java剑指offer之删除链表的节点,给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点,下文更多相关内容介绍,需要的小伙伴可以参考一下
    2022-04-04

最新评论