NET真的一定比JAVA快吗?
来源:互联网 发布:mac开机选择系统 编辑:程序博客网 时间:2024/06/09 14:25
我不记得我是在哪篇文章上看过,说在Windows上.net的速度一定会比Java写的程序快.但是没留心过,也以为肯定是这样的.刚好这几天研究.net上的StringBuilder,准备和Java的StringBuffer比较以下速度的时候,突然发现JDK5.0中居然也多出个StringBuilder类出来,呵呵.于是给它们3个都进行了次比较.
因为考虑JIT的影响所以取了10次时间差再取平均值来比较.
先看看它们3个在各自的文档中如何定义的:
.net StringBuilder
String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。
java StringBuilder
一个可变的字符序列。此类提供一个与StringBuffer
兼容的 API,但不保证同步。该类被设计用作 StringBuffer
的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer
要快。java StringBuffer
线程安全的可变字符序列。一个类似于String
的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。java和.net用的分别是Date与DateTime来获得时间差,所以这2个类的关键方法在这也有必要提到一下
java Date.getTime()
getTime
public long getTime()
- 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
- 返回:
- 自 1970 年 1 月 1 日 00:00:00 GMT 以来此日期表示的毫秒数。
.net DateTime.Ticks
[C#]public long Ticks {get;}属性值
表示此实例的日期和时间的刻度数。该值介于 MinValue 和 MaxValue 之间。
备注
此属性的值为自 0001 年 1 月 1 日午夜 12:00 以来所经过时间以 100 毫微秒为间隔表示时的数字。
好了一返回的是毫秒一个返回的是微妙,所以知道毫秒与微妙之间的转化也是有必要的
1秒=1,000,000 微秒(μs) 1微秒=1/1,000,000秒(s)
1秒=1,000,000,000 纳秒(ns)
1纳秒=1/1,000,000,000秒(s)
1秒=1,000,000,000,000 皮秒(ps) String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。
java StringBuilder
一个可变的字符序列。此类提供一个与StringBuffer
兼容的 API,但不保证同步。该类被设计用作 StringBuffer
的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer
要快。java StringBuffer
线程安全的可变字符序列。一个类似于String
的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。java和.net用的分别是Date与DateTime来获得时间差,所以这2个类的关键方法在这也有必要提到一下
java Date.getTime()
getTime
public long getTime()
- 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
- 返回:
- 自 1970 年 1 月 1 日 00:00:00 GMT 以来此日期表示的毫秒数。
.net DateTime.Ticks
[C#]public long Ticks {get;}属性值
表示此实例的日期和时间的刻度数。该值介于 MinValue 和 MaxValue 之间。
备注
此属性的值为自 0001 年 1 月 1 日午夜 12:00 以来所经过时间以 100 毫微秒为间隔表示时的数字。
好了一返回的是毫秒一个返回的是微妙,所以知道毫秒与微妙之间的转化也是有必要的
1秒=1,000,000 微秒(μs) 1微秒=1/1,000,000秒(s)
1秒=1,000,000,000 纳秒(ns)
1纳秒=1/1,000,000,000秒(s)
1秒=1,000,000,000,000 皮秒(ps)
C#程序:返回的时间是毫秒
using System;
using System.Text;
class Class1{
public static void Main(string[] args) {
StringBuilder s=new StringBuilder();
double[] tosum=new double[10];
DateTime d1=new DateTime();
DateTime d2=new DateTime();
for (int j=0;j<=9;j++)
{
d1=DateTime.Now;
for (int i=0;i<=40000;i++)
s.Append("Append");
d2=DateTime.Now;
tosum[j]=d2.Ticks -d1.Ticks;
}
double sum=0;
for (int j=0;j<=9;j++)
{
sum=sum+tosum[j];
}
Console.WriteLine("StringBuilder消耗的时间:"+sum/100); //取平均值与转化单位
}
}
结果:
java程序 :返回毫秒
import java.util.*;
class EString {
public static void main(java.lang.String[] args) {
StringBuilder s=new StringBuilder();
double[] tosum=new double[10];
for (int j=0;j<=9;j++){
Date d1=new Date();
for (int i=0;i<=40000;i++)
s.append("Append");
Date d2=new Date();
tosum[j]=d2.getTime()-d1.getTime();
}
double sum=0;
for (int j=0;j<=9;j++){
sum=sum+tosum[j];
}
System.out.println("StringBuilder消耗的时间:"+sum/10);
StringBuffer sb1=new StringBuffer();
for (int j=0;j<=9;j++){
Date test1=new Date();
for (int i=0;i<=40000;i++)
sb1.append("Append");
Date test2=new Date();
tosum[j]=test2.getTime()-test1.getTime();
}
sum=0;
for (int j=0;j<=9;j++){
sum=sum+tosum[j];
}
System.out.println("StringBuffer消耗的时间:"+sum/10);
}
}
结果:
对于这样的结果。我不想在说什么了……
- NET真的一定比JAVA快吗?
- C++真的比Java快吗?
- LinkedList 增删真的比ArrayList快吗?
- 比真机还要快的genymotion
- Java史上最大误解,你真的以为LinkedList比ArrayList增删快?
- 异或交换真的比开一个tmp快吗?
- 多线程一定快吗
- 多线程一定快吗
- 多线程一定快吗?
- java 比 c++ 快的例子
- C/C++比JAVA快的原因
- java 堆栈 比 堆 快的原因
- Java NIO 真的能快一些吗?
- Java比C++快?
- 指针真得比数组快吗?函数调用会拖慢程序多少?++i 比i = i+1 快吗?
- select的效率一定比epoll低吗?
- anic:比C快比Java安全比shell还简单的新语言
- “斐波那契查找”真的比“二分查找”快么?
- 几个不太常用但很有用的HTML Tag
- 你就是我窗外的春天(转贴)
- Web服务、SOA以及门户的未来
- 开发J2EE应用的要领
- ASP分页
- NET真的一定比JAVA快吗?
- 盖茨备忘录英文全文 (2005.11.11 摘自CSDN)
- 使用纽曼D625数码伴侣
- 在linux上播放ape(monkey audio)文件
- cygwin初学体会
- 《SunJava系统应用服务器平台》 简单使用教程(1)
- 关于求平方根(循环除)
- JAVA调用动态库方法说明
- Collection学习