Algorithm 版 (精华区)
发信人: Lerry (life is waiting...), 信区: Algorithm
标 题: [合集]java为什么这样快?
发信站: 哈工大紫丁香 (2003年11月27日18:30:04 星期四), 站内信件
────────────────────────────────────────
hewind ( 比pineapple写的程序慢了200倍! :( 555~~) 于 2003年10月09日12:41:05 星期四 说道:
java对字符串操作应当很快。
首先,两个字符串赋值。
String s1 = s2 ;
对于C++来说,这一步是通过拷贝构造函数实现的,在内存中有两个拷贝,
而且是按位拷贝的,这是需要时间的,字符串越长,需要的时间也越长。
而对于JAVA来说,这一步是通过增加字符串对象的引用计数而实现的。
也就是说,在内存中,只有一个拷贝,而且这个拷贝带有一个额外的存储
空间来存放有多少对象对它进行了引用。这也就是引用计数,只有当引用
计数为0的时候,它才会从内存中被删除。而类似于上面的赋值只是增加
这个引用计数值,而没有进行内存拷贝,这样,速度就远比C要来得快。
另外,JAVA的字符串有专门的额外空间来存放字符串的长度,因此,不需
要通过strlen的扫描方式获得字符串的长度,只要读一下额外空间的值就
行了,因此,这速度也会比C要快。
在想:自己写一个支持引用计数与字符串长度自存的字符串类,在在这个
类的基础上进行快速计算程序编制,这样应当能提供速度。
C居然比JAVA慢,ft!
────────────────────────────────────────
zhangyan (When Dumb meets Dumber) 于 2003年10月09日12:44:13 星期四 说道:
Java的String采用了COW优化,呵呵
其实也可以找到C++的COW优化的string实现
但是COW也有缺陷,在需要考虑多进程的情况下COW的实现就会非常慢
────────────────────────────────────────
hewind ( 比pineapple写的程序慢了200倍! :( 555~~) 于 2003年10月09日12:48:37 星期四 说道:
请教一下,COW优化是什么?
────────────────────────────────────────
zhangyan (When Dumb meets Dumber) 于 2003年10月09日12:49:47 星期四 说道:
copy-on-write
────────────────────────────────────────
hewind ( 比pineapple写的程序慢了200倍! :( 555~~) 于 2003年10月09日12:51:34 星期四 说道:
喔,知道了,谢谢。
在多线程下,应当要进行加锁机制,所以应该会慢的。
────────────────────────────────────────
zhangyan (When Dumb meets Dumber) 于 2003年10月09日12:53:19 星期四 说道:
不仅如此,即使是不考虑多进程
只考虑到异常安全的情况,也很麻烦
────────────────────────────────────────
cliff (狗皮膏药) 于 2003年10月09日17:37:04 星期四 说道:
这应该是说明构造的比较快
哪做乘法呢?
应该分别统计然后比较一下看看
────────────────────────────────────────
Javor (Java/Linux/Gcc) 于 2003年10月10日11:23:42 星期五 说道:
乘法也是快得一塌糊涂,呵呵
────────────────────────────────────────
zhangyan (When Dumb meets Dumber) 于 2003年10月10日15:04:40 星期五 说道:
智商真高,哈哈
────────────────────────────────────────
cliff (狗皮膏药) 于 2003年10月10日15:05:55 星期五 说道:
────────────────────────────────────────
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.790毫秒