Groovy作为一种动态语言,性能和JAVA比肯定是差不少,根据网友的测试,由于测试环境,场景和编译参数的不同,大概有差2到7倍的差距

那么同样的Groovy,在不同的JDK版本下,会有着怎样的差异呢?好奇试了一下

测试代码写得非常简单,如下,为了测试一些动态语言中常用的特性,特别用上了闭包和动态特性,这样才有意义么

class GroovyWithJdk{
static void run(){
1000.times { "fib"(20) } //为了动态特性
} static def fib(n){
if(n<2)
return 1 def c = {x,y->fib(x)+fib(y)} //纯粹就是为了测试闭包
c(n-1,n-2)
}
} println System.getProperty("java.version") long start = System.currentTimeMillis()
GroovyWithJdk.run()
println "用时:${System.currentTimeMillis()-start}毫秒"

  

结果,让人很欣慰呀,果然越新的的JDK性能越好(当然,也是因为新JDK增加了对于动态语言的支持),很合我这样追新族的心意。

下面是结果:

/*
1.6.0_45
用时:6652毫秒 1.7.0_79
用时:5590毫秒 1.8.0_20
用时:4435毫秒 32位JDK的结果,因为我是64位机和系统,运行32位JDK时要模拟成32位的,所以效率差得有点大
1.8.0_51
用时:12858毫秒 */

  

可以看到,JDK8相比JDK6,有着差不多30%的提升

至于如何快速测试?由于GroovyConsole本来就是一个启动脚本,它是依靠JAVA_HOME来指定使用哪个JDK版本的,所以只要在调用前先指定一下JAVA_HOME就可以了。可以三个实例一起运行

set JAVA_HOME=D:\JDK7

  

Groovy在不同JDK版本下的性能差异的更多相关文章

  1. Asp.Net运行于32/64模式下的性能差异

    项目使用的是Oracle数据库,.Net使用Odac对数据库进行访问.在官方下载Odac时会让你选择是下载32位的还是64位的.这会直接影响到网站的运行模式.目前我们使用的是32位的,那么布署时,需要 ...

  2. 关于JDK高版本下RMI、LDAP+JNDI bypass的一点笔记

    1.关于RMI 只启用RMI服务时,这时候RMI客户端能够去打服务端,有两种情况,第一种就是利用服务端本地的gadget,具体要看服务端pom.xml文件 比如yso中yso工具中已经集合了很多gad ...

  3. Win7 下以管理员身份运行批处理文件,切换JDK版本

    Win7下 切换JDK的批处理命令 1. 批处理文件(必须以管理员身份执行)内容如下 @echo off rem --- Base Config 配置JDK的安装目录 --- :init set JA ...

  4. Mac OS X 下多个JDK版本的切换小技巧

    如果在系统中安装了多个Java JDK 版本,可能会根据项目或编译环境的不同来回切换,下面有两种非常方便的方法供大家选择. 我的机器上有 Java 7 和 Java 8,大家根据自己的 JDK 版本自 ...

  5. 解决Linux下jdk版本与安装版本不一致

    解决Linux下jdk版本与安装版本不一致 在Linux下安装jdk后,利用java -version查看版本使,发现不是自己所安装的jdk版本; 解决方案: which java ——查看默认的jd ...

  6. JMeter下Groovy和BeanShell语言在不同组件中性能差异实践探究

    一般而言JMeter下性能最好的是jar包这类java原生请求,对于JMeter并没有原生支持的请求,一般都会将其直接编译为jar包,然后再JMeter中调用,这样性能最好. 但是有些需求并不适合用j ...

  7. Windows下多个JDK版本之间的切换

    一.JDK版本切换批处理脚本   我们平时在window上做开发的时候,可能需要同时开发两个甚至多个项目,有时不同的项目对JDK的版本要求有区别,这时候我们可能会在一台电脑上安装多个版本的JDK,如下 ...

  8. Android Studio 使用笔记:[转] Mac下修改Android Studio 所用的JDK版本

    原文链接:http://www.jianshu.com/p/d8d1d72d0248# 最近项目从Eclipse+Ant构建模式转移到了Android Studio+Gradle构建模式,自然的JDK ...

  9. MAC OS下JDK版本切换指南

    刚上手的用MAC开发的小伙伴们会发现,MAC自带JDK版本为1.6,通常会安装在 /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/目录下,但是更多 ...

随机推荐

  1. DataSetToList 和 DataTableTolist 转换

    DataSetToList 及DataTableTolist经常使用,在此分享一下我的方法. DataSetToList 和 DataTableTolist 转换 DataSetToList 和 Da ...

  2. NOIP第二次模拟赛 stage1【划分数列(seq.pas/c/cpp)

    7划分数列(seq.pas/c/cpp) [题目描述] 给你一个有n个元素的数列,要求把它划分成k段,使每段元素和的最大值最小 [输入格式] 第一行两个正整数n,k 第二行为此数列ai [输出格式] ...

  3. selenium_python学习

    虫师selenium_python 学习:原文档 下载:http://download.csdn.net/detail/fnngj/6041329 具体参看selenium_python API : ...

  4. [剖析Javascript原理]1.原生数据类型

    一.原生数据类型 JS共有5种原生数据类型: Boolean true或者false String 字符串,在单引号或者双引号之间(不存在字符类型) Number 整数或者浮点数 Null 空 und ...

  5. Hibernate get 和load的区别

    1 load是要用的时候才从数据库去查询,get 是马上查询. 2 对于不存在的记录,get会报空指针异常,load会报 org.hibernate.ObjectNotFoundException:  ...

  6. C# MVC 自学笔记—6 编辑方法和编辑视图

    ==============================翻译============================== 运行该应用程序并浏览到Movies控制器通过将/Movies追加到您的浏览 ...

  7. codeigniter使用mongodb/redis

    ci2.x版本,使用mongodb,需要安装pecl-php-mongo扩展(github上很多扩展已不可用,找到个可用版本纪录于此),添加到php.ini中 使用如下 public function ...

  8. Cocos2d-x 3.0 lua规划 真正的现在Android在响应Home密钥和Back纽带

    local listenerKey= cc.EventListenerKeyboard:create() local function onKeyReleaseed(keycode,event) if ...

  9. Struts2复习(四)防止表单反复提交

    1.採取请求转发的方式完毕表单内容的加入会造成内容的反复插入. 2.採取重定向的方式实现数据的加入不会导致数据的反复插入. 3.防止表单反复提交的两种方式 1)  通过重定向  2)  通过Sessi ...

  10. C#反射调用程序集类中方法

    建立类 class OperatorClass { /// <summary> /// 加法 /// </summary> /// <param name="x ...