`
cloud21
  • 浏览: 397479 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

老问题新测试:java和C单机性能比较

阅读更多
Java和C最大的不同是在于Java的可伸缩性Scalable,能够平滑发展到分布式云计算平台,通过云计算能够处理不断增长的业务访问量,这个代价过程是非常小容易的。

那么在单机环境下,Java过去一直被认为低于C程序,最近老外做了一个实验,进行了比较:

String Hash案例:
Complete C++ code: http://pastebin.com/d280c1cd4
Complete Java code: http://pastebin.com/m541c4655
主要核心程序如下,是一个循环:

int h=0;  for( int i=0; i<len; i++ )    h = 31*h+str[i];  return h;

在新的x86上运行100 million 循环,结果如下:
> a.out 100000000
100000000 hashes in 5.636362 secs
> java str_hash 100000000
100000000 hashes in 5.745 secs

两者相差无多,据作者介绍,如果在老版本的gcc & Java比较,Java会比C快15%,但这次是C++ 要快2%。


筛选案例
Complete C++ code: http://pastebin.com/m3784c090
Complete Java code: http://pastebin.com/m4b414295
核心代码如下:

bool *sieve = new bool[max];  for (int i=0; i<max; i++) sieve[i] = true;  sieve[0] = false;  sieve[1] = false;  int lim = (int)sqrt(max);  for (int n=2; n<lim; n++) {    if (sieve[n]) {      for (int j=2*n; j<max; j+=n)        sieve[j] = false;    }  }

测试结果:
> a.out 100000000
100000000 primes in 1.568016 secs
> java sieve 100000000
100000000 primes in 1.548 secs
Java要快些。

Profiling Enables Big Gains案例
Complete C code:
vcall.cpp http://pastebin.com/m70dbe7d6
vcall.hpp http://pastebin.com/m13055a8c
A.cpp http://pastebin.com/m5aa1b232
B.cpp http://pastebin.com/m2e46ec23

Complete Java code:
vcall.java http://pastebin.com/m149bbdf0
A.java http://pastebin.com/m2e33d6df
B.java http://pastebin.com/m2b1d75bb

核心代码是:

int sum=0;    for (int i = 0; i < max; i++)       sum += val();  // virtual call    return sum;

在同样x86上测试结果:
> a.out 1000000000 0
1000000000 adds in 2.657645 secs
> java vcall 1000000000 0
1000000000 adds in 0.0 secs

Java几乎是无限地快,至少可以说明Java不比C慢,甚至在某些情况下快于C,那种认为java比C慢的观点应该扔到垃圾堆里去了。

原文:
Java vs C performance... again...
分享到:
评论
1 楼 westice 2009-10-02  
really?

相关推荐

    java源码包---java 源码 大量 实例

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    java源码包3

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    java源码包2

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    性能测试需要搞懂的问题.pdf

    性能测试是评估软件系统在高负载或大数据量下的性能表现的过程。以下是对各个知识点的详细说明: 1. **TPS(Transactions Per Second)**:TPS代表每秒事务数,是衡量系统处理能力的重要指标,表示系统在单位时间内...

    大型分布式系统java应用

    - Jenkins、GitLab CI/CD等工具用于自动化构建、测试和部署,确保分布式系统的快速迭代和稳定性。 8. **监控与日志管理** - ELK Stack(Elasticsearch、Logstash、Kibana)组合提供了强大的日志管理和分析能力。 ...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java编写的山寨QQ,多人聊天+用户在线 21个目标文件 摘要:JAVA源码,媒体网络,山寨QQ,Java聊天程序 Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构, 当用户发送第一次请求的时候,验证...

    java源码包4

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java编写的山寨QQ,多人聊天+用户在线 21个目标文件 摘要:JAVA源码,媒体网络,山寨QQ,Java聊天程序 Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构, 当用户发送第一次请求的时候,验证...

    sqlite驱动 java数据库驱动 sqlite连接java sqlite sqlite.jar

    SQLite是一款轻量级的开源关系型数据库,它无需单独的服务器进程,可以直接嵌入到Java、C、Python等多语言的应用程序中。在Java中,我们通常使用SQLite JDBC驱动来与SQLite数据库进行交互,这就是"sqlite驱动 java...

    大型java项目开发应注意哪些问题共1页.pdf.zip

    14. **扩展性与弹性**:设计时考虑到未来可能的扩展,比如水平扩展(增加服务器)、垂直扩展(提升单机性能)等。使用云服务以实现弹性伸缩。 15. **运维自动化**:通过配置管理工具(如Ansible、Chef)实现环境...

    windows搭建activemq单机版

    总结来说,Windows上搭建ActiveMQ单机版需要安装JDK、解压ActiveMQ二进制包、配置和启动服务,然后通过Web管理界面进行管理和测试。理解`activemq.xml`配置文件的结构和内容,以及熟悉ActiveMQ的工作原理,将有助于...

    tiggerdb测试

    - 测试比较了TigerGraph、Neo4j和Titan的数据加载和查询性能。 - 测试中使用了多种数据集,包括graph500-22和twitter_rv等合成和真实数据集。 - 硬件平台采用了Amazon EC2的C3.8xlarge实例类型,提供32个vCPU、...

    易买网电商项目 数据集 集群 单机 包含需要的war包

    易买网电商项目是一个基于Java技术构建的在线购物平台,数据集、集群和单机环境的设置是该项目的重要组成部分。这个压缩包包含了运行该项目所需的全部资源,特别是`war`包,它是Web应用程序的归档文件,用于在Java...

    windows版本的单机solr

    总的来说,Windows版本的单机Solr为开发者和管理员提供了一个便捷的平台,用于在本地进行搜索服务的开发、测试和调试。通过深入学习和实践,你可以充分利用Solr的强大功能,为你的应用构建高效、灵活的全文检索解决...

    benchmarksql5.0测试达梦数据库方法.docx

    TPC-C规范通过模拟商品销售过程中的五种典型事务——NewOrder、Payment、OrderStatus、Delivery和StockLevel,来测量系统的处理能力,主要指标是每分钟处理的新订单数(tpmC)。本文将详细介绍如何在单机环境下,...

    C语言黑白棋ai游戏源码.rar

    通常,毕业设计要求学生综合运用所学知识,解决一个实际问题,因此这个源码可能包含了较为全面的C语言编程技巧,以及游戏设计和AI算法的应用。 【标签解析】 标签中提到了“计算机网络”、“毕业设计”、“C语言”...

    fastDFS单机版安装教程+安装使用包

    FastDFS是一个基于C语言开发的分布式文件系统,它对文件进行管理,包括文件存储、文件同步、文件访问(文件上传、文件下载)等功能,解决了大容量存储和负载均衡的问题。FastDFS有两个主要组件:Tracker服务器和...

    impala单机部署手册

    Impala 是 Cloudera 提供的一款高效率的 SQL 查询工具,提供实时的查询效果,官方测试性能比 Hive 快 10 到 100 倍,其 SQL 查询比 SparkSQL 还要更加快速,号称是当前大数据领域最快的查询 SQL 工具。Impala 是参照...

    Hadoop单机及集群配置[整理].pdf

    - 设置默认JDK:`sudo update-alternatives --install /usr/lib/jvm/java java/usr/lib/jvm/java-7-sun/bin/java 300` 和 `sudo update-alternatives --install /usr/lib/jvm/javac javac /usr/lib/jvm/java-7-sun/...

    solr7.4,linux单机、集群版搭建设置IK分词器

    ### Solr 7.4 Linux环境下单机及集群版本搭建与IK分词器配置详解 #### 一、Solr简介 Solr是一款开源的、基于Lucene的全文搜索引擎。它提供了一个高性能、可伸缩的企业级搜索平台。Solr不仅支持分布式部署(集群...

Global site tag (gtag.js) - Google Analytics