文档章节

Groovy,革命尚未成功,同志仍需努力。

爱喝貓的咖啡
 爱喝貓的咖啡
发布于 2014/03/12 15:28
字数 427
阅读 142
收藏 2

公司要搞一个员工之间的技术交流,每个人准备一个关注的课题。

本喵,打算准备的课题是:jvm上的几种script语言实现。  Ruby、Python、Scala、Groovy等。

于是今天对Groovy做了几个简单的性能测试。


static def t4(){
        def o = null
        def t = System.currentTimeMillis();
        for(i in 0..100000){
            o = [0:i, 1:i, 2:i]
        }
        println o.getClass()
        println o
        def ht = System.currentTimeMillis()-t
        println("耗时:${ht/1000}")

        Map<Integer,Integer> o1 = null
        long t1 = System.currentTimeMillis()
        for(int i=0; i<=100000; i++){
          o1 = new HashMap<Integer,Integer>()
          o1.put(0,i)
          o1.put(1,i)
          o1.put(2,i)
        }
        System.out.println(o1.getClass())
        System.out.println(o1)
        long ht1 = System.currentTimeMillis()-t1
        System.out.println("耗时:"+ht1/1000)
    }

反复执行了几遍,结果差不多:

class java.util.LinkedHashMap
[0:100000, 1:100000, 2:100000]

耗时:0.266


class java.util.HashMap
[0:100000, 1:100000, 2:100000]
耗时:0.14

--------------------------------

当然,这不能算是Groovy的性能问题,Groovy采用的是java的实现,而map实现是LinkedHashMap,这种有序的Map不可能比HashMap快。只是我不明白,Groovy为啥用LinkedHashMap,我个人认为大部分情况下,不需要有序的Map,Groovy何必多此一举?


static def t5(){
        int n = 100*100

        def ml = ''''''       
        long t = System.currentTimeMillis()
        for(i in 1..n){
            ml += "1234567890"
            //ml << "1234567890"
        }
        long ht = System.currentTimeMillis()-t
        System.out.println(ml.length())
        System.out.println(ht/1000)
        System.out.println("==1==")

        def ms = new StringBuilder()
        t = System.currentTimeMillis()
        for(i in 1..n){
            //ms += "1234567890" //跟ml += "1234567890"差不多慢
            ms << "1234567890"
        }
        ht = System.currentTimeMillis()-t
        System.out.println(ms.length())
        System.out.println(ht/1000)
        System.out.println("==2==")

        t = System.currentTimeMillis()
        StringBuilder sb = new StringBuilder()
        for(int i=1; i<=n; i++){
            sb.append("1234567890")
        }
        ht = System.currentTimeMillis()-t
        System.out.println(sb.length())
        System.out.println(ht/1000)
        System.out.println("==3==")
    }

这个测试的结果,我想大家猜到了:

100000
3.985
==1==
100000
0
==2==
100000
0.016
==3==

虽然,Groovy提供了简洁的语法,但是使用起来,还是需要点技巧的。

我个人认为,Groovy需要在性能优化方面努努力。

© 著作权归作者所有

爱喝貓的咖啡

爱喝貓的咖啡

粉丝 18
博文 58
码字总数 31397
作品 0
朝阳
程序员
私信 提问
发一个老帖,人才啊

怒 何故 昨日暮 不意见她 把纤纤玉手 交那衰人牵住 盈盈笑语左右顾 神采飞扬凌波微步 美眸中一片深情倾注 似前年与我同在湖畔路 也这般附耳交颐低语轻诉 如今见我头也不点形同陌路 我发现自己...

红薯
2009/05/06
342
7
Python学习笔记二十四( 元类 )

class属性 class属性可以查看对象的类型. Person 类的实例对象person 的类型时Person 类类型, Python 是面向对象的语言, 那么Person 的类对象的类型又是什么? Person / int / str 的类对象的...

DragonFangQy
2018/05/27
0
0
2016/11/17工作日报

自动化可以开始开发测试用例啦! 自动化可以开始开发测试用例啦! 自动化可以开始开发测试用例啦! 自动化框架的功能基本都已经实现了,已经实现测试数据与脚本逻辑分离,目前定的框架为只有...

长春李某人
2016/11/17
3
1
当今社会月薪过万的人多吗?您认为月薪过万算是高薪资吗?

第一个问题,当今社会月薪过万的人多吗? 多如牛毛! 第二个问题,您认为月薪过万算是高薪资吗? 都多如牛毛了,算什么算啊…… 如果在北上广深这样的一线城市,月薪过万真的是不算什么,不能...

明哥聊求职
2018/08/10
0
0
温湿度监控系统 设计

温湿度监控系统项目总结 系统构想: DHT11采集数据,通过485总线(初期用串口)传递给上位机,上位机可控制其参数设置,控制其报警状态,读取当前温湿度值,读取当前下位机参数设置情况; 下...

韩A
2017/04/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Es问题汇总

1.索引类型为Date问题 "activitytime": { "type": "date", "format": "epoch_second"} 报错:message [ElasticsearchException[Elasticsearch exception [type=mapper_parsing_......

HLee
8分钟前
2
0
项目启动 spring 莫名 爆null 空指针异常,排查

项目之前跑起来运行好好的,结果 其他相关的模块更新代码之后,项目启动报错了 2019-12-06 08:55:13 [main] ERROR o.s.boot.SpringApplication - Application startup failedjava.lang.Nu...

之渊
9分钟前
5
0
人工智能如何快速入门?这10个开源AI项目真太香!

在过去的几年中,机器学习在许多行业中开辟了新的视野,出现了一些高级用例:Facebook的面部识别,Netflix推荐的电影,PrismaAI的图像样式转换,Siri的语音识别,Google Allo的自然语言处理,...

Gaikikii
17分钟前
4
0
电脑数据加密用什么软件好?深圳源代码数据加密软件工具那个好?风奥科技

企业文件加密对于企业发展的重要性?现在科学技术的发展,信息化进程的加密快,信息化产品以及融入生活与我们的日常生活息息相关!例如个人用户在日常的网购、以及通过一定的设备来获取新闻等...

fasoft
37分钟前
4
0
redis运行一段时间之后假死

现象:redis运行一段时间之后就会出现假死的现象 假死指的是:进程在、pid在、telnet 端口是通的、redis-cli命令可以连接,但无法查询数据,查询的时候报错,如下图: 可以看到这个报错是有关...

Jack088
39分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部