`

Java6是否真的快了?(转载)

阅读更多
转载自http://blog.sina.com.cn/swingjava

现在Java6已经发布了,除了许多令人激动的新功能以外,最让Java用户激动也许就是Java6的速度比Java5有了进一步的提高。包括JVM、Java Swing在内的许多部分都有不同程度的提高,总的来说Java6平均比Java5提高了20%-30%。Java2D在Java6中做了特殊的优化,其速度提高更大。

但是最近有人报告JFreeChart在Java 6要比Java 5上要慢,Dave Gilbert觉得很可疑,于是他亲自使用JFreeChart做了Java5和Java6性能测试,并在他的博客公布了测试结果,下面是Dave博客的原文译文。

我收到一个报告说JFreeChat在Java6下比在Java5下跑的要慢,我觉得很奇怪,因为我平时的观察是Java6要比Java5要明显快,各方面都是如此。于是,我花了些时间做了一个benchmark,测试一些标准类型图表(饼图、直方图以及时间序列图),自己亲自看看。

每一种图表类型,我写了一个方法创建一个新的图表,然后生成一个BufferedImage(500x300),然后将它画到图像中。为测试性能,我调用该方法1000次,分别记录第一个500次和第二个500次重复生成图表的时间,结果是第二个500次总是比第一个500次速度要快,可以想象这是 HotSpot起作用的结果...但是Java 5和Java 6之间变化总是相同的,因此这儿我只贴出了第一个500次的测试结果。每个时间记录我都运行了三边,并取平均值作为测量结果(每次运行结果基本相当)。

首先,在WindowsXP上测量的结果(因为测量的是相同重复次数所用时间,因此值越小越好):

和WindowsXP同一台机器运行的Ubuntu Linux上结果相似(总的来说比WindowsXP慢一些):

这给我留下了深刻的印象,所有在Java6的测试用例,500张图在10秒中之内生成,大概每秒钟生成50到70张!Java5和Java6之间的性能改进让人震惊!

生成图表的源代码(生成直方图):
public void run() {
    DefaultCategoryDataset dataset = new DefaultCategoryDataset();
    dataset.addValue(3.5, "Row 1", "Column 1");
    dataset.addValue(4.5, "Row 2", "Column 1");
    dataset.addValue(2.5, "Row 1", "Column 2");
    dataset.addValue(6.5, "Row 2", "Column 2");
    dataset.addValue(5.5, "Row 1", "Column 3");
    dataset.addValue(4.5, "Row 2", "Column 3");
    dataset.addValue(8.5, "Row 1", "Column 4");
    dataset.addValue(5.5, "Row 2", "Column 4");
    JFreeChart chart = ChartFactory.createBarChart("Test Chart",
            "Category", "Value", dataset, PlotOrientation.VERTICAL, true,
            true, false);
    BufferedImage image = new BufferedImage(500, 300,
            BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2 = image.createGraphics();
    chart.draw(g2, new Rectangle(500, 300));
}

饼图的源代码:
public void run() {
    DefaultPieDataset dataset = new DefaultPieDataset();
    dataset.setValue("Section 1", 43.4);
    dataset.setValue("Section 2", 13.8);
    dataset.setValue("Section 3", 27.9);
    dataset.setValue("Section 4", 3.4);
    dataset.setValue("Section 5", 29.9);
    dataset.setValue("Section 6", 75.3);
    JFreeChart chart = ChartFactory.createPieChart("Test Chart", dataset,
            true, true, false);
    BufferedImage image = new BufferedImage(500, 300,
            BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2 = image.createGraphics();
    chart.draw(g2, new Rectangle(500, 300));
}

时间序列图源代码:
public void run() {
    TimeSeries s = new TimeSeries("Series 1");
    Day t = new Day();
    for (int i = 0; i < 100; i++) {
        s.add(t, 100.0);
        t = (Day) t.next();
    }
    TimeSeriesCollection dataset = new TimeSeriesCollection();
    dataset.addSeries(s);
  
    JFreeChart chart = ChartFactory.createTimeSeriesChart("Test Chart",
            "Date", "Value", dataset, true, true, false);
    BufferedImage image = new BufferedImage(500, 300,
            BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2 = image.createGraphics();
    chart.draw(g2, new Rectangle(500, 300));
}

我也曾使用GNU Classpath(JamVM)运行过这些测试,结果是,饼图耗时264,733 milliseconds, 直方图263,238 milliseconds, 时间序列图470,054 milliseconds. 这比我预期的要慢一些,大概一秒钟生成1-2个图,并且我相信屏幕刷新(例如,当运行JFreeChart演示时)速度要快一些。这也许和BufferedImage有关...不幸运的是目前我还没有时间仔细研究。

单从作者做的这次性能测试来看,GNU Classpath的运行结果竟然要比Java6慢20-30倍!Java6能在一秒钟内生成50-70幅图表,而GNU Classpath一秒钟内才能生成1-2幅,不知道IBM的Java速度又会怎么样。
文章引用自:http://jroller.com/page/dgilbert?entry=is_java_se_1_6
分享到:
评论

相关推荐

    JAVA OA平台源码(转载)SPRING BOOT....

    【标题】:“JAVA OA平台源码(转载)SPRING BOOT...” 这个开源项目是一个基于Java技术的OA(Office Automation)管理系统的源代码实现,利用了Spring Boot框架进行开发。Spring Boot是Spring生态中的一个核心组件...

    深入分析 Java I/O 的工作机制(转载)

    Java I/O(输入/输出)系统是Java编程语言中用于处理数据流的重要组成部分,它允许程序与外部资源如文件、网络、硬件设备等进行交互。深入理解Java I/O的工作机制对于开发高效、可靠的系统至关重要。以下是对Java I/...

    JAVA文章精选542个(txt) 免费分享

    这些JAVA文章精选涵盖了广泛的Java开发主题,从基础到高级,为学习和提升Java技术提供了丰富的资源。以下是对一些文件名称的解析和相关知识点的详细解释: 1. **实体对象的抽象以及一种基于数据库的实现(转).txt**...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...

    Java面试资料大集合

    通过阅读《Java常见面试题.doc》、《Java面试题1.htm》、《5559.htm》、《Java面试题2.htm》、《java面试笔试题大汇总 及c-c++面试试题(转载 ) - happyfish - BlogJava.mht》以及《Java常见面试题.txt》等文件,您...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...

    转载,若依快速开发框架很不错,详情请看https://www.ruoyi.vip/

    Ruoyi 快速开发框架是一款基于Java技术的开源项目,专为提高开发效率而设计。这个框架结合了现代化的前端技术与强大的后端服务,提供了丰富的功能和优秀的用户体验。在RuoYi-Vue-fast-master这个压缩包中,我们可以...

    阿里云ossjava源码-need:转载大神的LNMP

    java源码 本脚本使用shell编写,为了快速部署LEMP / LAMP / LNMP / LNMPA / LTMP (Linux、Nginx/Tengine/OpenResty、生产环境下MySQL/MariaDB/Percona、PHP、JAVA),适用于CentOS 6 ~ 7(包括 redhat)、Debian 6 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...

    [转载]深入理解JVM

    2. **验证**:JVM会检查字节码文件是否符合JVM规范的要求,确保程序的正确性和安全性。 3. **准备**:为类的静态变量分配内存并设置默认值。 4. **解析**:将符号引用转换为直接引用的过程。 5. **初始化**:执行类...

    [转载] Clustering经典范文学习

    【标题】:“[转载] Clustering经典范文学习” 这篇博文主要围绕着Clustering(集群)这一主题展开,作者分享了一篇经典的学习资料——"J2EEClustering.pdf"。Clustering在IT领域,特别是Java EE(现在称为Jakarta ...

    Python学习 | 一个JAVA程序员两天的Python入门笔记

    转载本文章请标明作者和出处 本文出自《Darwin的程序空间》 能阻止你成功的人,只有你自己 vlog 时间:2020年02月28日-2020年03月01日 ——————两个白天,一个通宵 学习方式:视频(黑马),博客,百度 完成...

    Jboss7快速入门手册

    - 全面兼容Java EE 6,支持JDK 6/7,意味着可以更好地与最新的Java技术栈集成。 - 支持OSGi 4.2,使得OSGi和Java EE组件模型的集成成为可能。 - 提供了两种运行模式:Standalone模式和Domain模式。Standalone模式...

    weblogic 安装转载

    WebLogic 是一款由甲骨文公司提供的企业级 Java 应用服务器,它包含了对 Java EE(Java Enterprise Edition)规范的支持,其中包括对EJB(Enterprise JavaBeans)的全面支持。EJB 是 Java 平台上的核心组件之一,...

    【转载】正则表达式教程

    例如,在Java中,`java.util.regex`包提供了`Pattern`和`Matcher`类来实现正则表达式的操作。 通过阅读"正则表达式30分钟入门教程.html"和".mht"文件,你可以进一步了解这些概念的实际应用,以及如何在不同场景下...

    arthas命令总结(转载)

    6. `expr`:执行Java表达式并返回结果。 7. `jad`:反编译字节码为Java源代码。 8. `jad2smali`:将字节码反编译为Smali代码。 9. `monitor`:监控方法调用,记录方法的执行时间、参数等。 10. `nc`:网络调试,发送...

    Eclipse快捷键大全(转载)

    Eclipse是一款广泛应用的开源集成开发环境(IDE),尤其在Java开发领域,它以其强大的功能和高度可定制性受到程序员的喜爱。本文将详细介绍Eclipse中的常用快捷键,帮助开发者提高编程效率。 一、编辑操作 1. **...

    hsqldb使用(转载)

    - **In-Process (Standalone)模式**:在这种模式下,数据库与应用程序在同一进程中运行,访问速度最快。但是,它仅限于当前进程,其他工具无法同时访问。JDBC连接字符串类似于`jdbc:hsqldb:file:/opt/db/testdb`。 ...

    MyEclipse 7.0快捷键大全[转载]

    2. **【Ctrl+Shift+T】**:在工作空间中查找Java类,支持通配符,方便快速定位所需类。 3. **【Ctrl+Shift+R】**:类似【Ctrl+Shift+T】,但搜索所有文件,同样接受通配符。 4. **【Ctrl+Shift+G】**:查找类、...

Global site tag (gtag.js) - Google Analytics