博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我也写几行简单代码来看看Java的性能
阅读量:6526 次
发布时间:2019-06-24

本文共 2055 字,大约阅读时间需要 6 分钟。

大家都说,Java性能现在已经很好啦,不能再抱着老观点去看它啦,甚至也有人说,Java性能已经超越C++了。我也相信Java虚拟机在不断优化,性能有很大提高,但要说它能超越C++,我想还是有相当难度的,当然,不排除在某些特殊情况下它能超越C++。不过眼见为实,耳听为虚,不想看那些所谓权威机构的测试结果,就自己动手吧,写几行代码权当消遣。呵呵,网上已经有人贴了这类测试代码,拿来改一下,我们就简单的计算平方和然后再取模就是了。代码写完,可以跑起来看看了。哦,我们的环境是:
Windows XP Professional Service Pack 3
Intel Core2 Duo CPU T7300 @ 2.00GHz
778MHz, 2GB RAM
Visual C++ 2008 Express Edition
java version "1.6.0_10-beta"
 
运行结果(运行时间,单位为秒):
 
1
st
2
nd
3
rd
Average
Java
1.55
1.53
1.54
1.54
C++
1.41
1.41
1.41
1.41
可以看到,对我的测试例而言,两者性能确实相差不大了,Java只比C++逊色那么一点点,对大多数应用而言,这点性能损失确实可以忽略不计了。
声明一下,测试结果严重依赖于测试用例,所以我的测试也不一定具有代表性,大家看看就好,不用太认真,:)
 
最后贴上测试用的源码:
C++代码:
#include  "stdafx.h"
#include  <iostream>
#include  <windows.h>
 
using  namespace std;
 
class  TimeRecorder
{
public :
     TimeRecorder() { Start(); }
     void Start() { m_start = GetTickCount(); }
     void Stop() { m_end = GetTickCount(); }
     double GetInterval() { return (m_end - m_start)/1000.0; }
 
private :
     DWORD m_start;
     DWORD m_end;
};
 
int  g_result;
double  compute(int maxVal, int modNum)
{
     TimeRecorder timer;
     int result = 0;
     for (int i = 1; i < maxVal; i++)
     {
         result += i * i;
         result %= modNum;
     }
     //  有些ugly, 不过不加此句的话上面的计算过程会被完全忽略掉, 运行时间为0, 
:)
     g_result = result;
     timer.Stop();
     return timer.GetInterval();
}
 
int  _tmain(int argc, _TCHAR* argv[])
{
     double time = 0.0;
 
     for (int i = 100000; i < 1000000; i += 100000)
     {
         for (int j = 100000; j < 1000000; j += 100000)
         {
              time += compute(i, j);
         }
     }
     cout << time << endl;
}
 
Java代码:
import java.util.Arrays;
 
public class GeneratePrimes
{
    public static double compute(int maxVal, int modNum)
    {
      long start = System.currentTimeMillis();
   
      int result = 0;
      for (int i = 1; i < maxVal; i++)
      {
        result += i * i;
        result %= modNum;
      }
      g_result = result;
     
      return (System.currentTimeMillis() - start)/1000.0;
    }
   
    public static void main(String args[])
    {
        double time = 0.d;
        for (int i = 100000; i < 1000000; i += 100000)
        {
          for (int j = 100000; j < 1000000; j += 100000)
          {
            time += compute(i, j);
          }
        }
 
        System.out.println(time);
    }
   
    public static int g_result;
}
本文转自Intel_ISN 51CTO博客,原文链接:http://blog.51cto.com/intelisn/130677,如需转载请自行联系原作者
你可能感兴趣的文章
svg 中values怎么结合attributeName 属性,来设置具体的值!
查看>>
ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程
查看>>
目录内批量查找替换,我用 tree 替代 find。
查看>>
js二维数组定义和初始化的三种方法
查看>>
7.Swift学习之循环
查看>>
Android实现SwipeBack(右滑退出)效果
查看>>
爬虫与swift
查看>>
如何用 Parse 和 Swift 搭建一个像 Instagram 那样的应用?
查看>>
Redis主从复制原理
查看>>
Android开发小技巧之不再使用原生的WebView了
查看>>
代码优化、静态代码检测
查看>>
区块链开发公司 区块链未来可能用于哪些方面?
查看>>
Flask基础知识点2
查看>>
ListView 的 Adapter 适配器模板
查看>>
Android 仿微信通讯录列表侧边栏
查看>>
Redis简单集群配置
查看>>
正式加入云栖
查看>>
PHPCMS后台首页去掉开发者信息
查看>>
饿了么与口碑正式合并了!
查看>>
Kubernetes NetworkPolicy:打造更安全的容器运行环境
查看>>