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

通过对比Java5和Java6在图表生成上的性能,发现Java6在速度上有显著提升,特别是使用JFreeChart时,Java6的表现优于Java5。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自[url]http://blog.sina.com.cn/swingjava[/url]

现在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上测量的结果(因为测量的是相同重复次数所用时间,因此值越小越好):
[img]http://www.kutoku.info/images/java/100920/demo01.png[/img]
和WindowsXP同一台机器运行的Ubuntu Linux上结果相似(总的来说比WindowsXP慢一些):
[img]http://www.kutoku.info/images/java/100920/demo02.png[/img]
这给我留下了深刻的印象,所有在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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值