到底那个效率高-初始化、垃圾收集或虚拟机的问题 ?
2005-07-28 16:40
344 查看
我用J2SDK1.4 运行下面程序片断:
//方式1:只定义一个String对象引用;以后重用这个对象引用存储信息
long before = System.currentTimeMillis();
String s;
for(int i=0;i<10000000;i++){
s = "a";
}
long after = System.currentTimeMillis();
//运行后检验这种方法用时长,耗时是下一种方式的几倍甚至10倍
System.out.println(after - before);
//方式2:每次都重新初始化一个String 对象引用
before = System.currentTimeMillis();
for(int i=0;i<10000000;i++){
String b = "a";
}
after = System.currentTimeMillis();
System.out.println(after - before);
感觉方式1耗时应该比方式2短,但运行结果与想象不符。
按照这篇文章对String 对象初始化的说明,本例中的String对象全部使用String池中缓存的对象“a”,这样方式1与方式2在初始化时没有区别; 但方式2维护了更多的局部变量(即对象引用),反而速度更快,是何原因?请高手指点。
//方式1:只定义一个String对象引用;以后重用这个对象引用存储信息
long before = System.currentTimeMillis();
String s;
for(int i=0;i<10000000;i++){
s = "a";
}
long after = System.currentTimeMillis();
//运行后检验这种方法用时长,耗时是下一种方式的几倍甚至10倍
System.out.println(after - before);
//方式2:每次都重新初始化一个String 对象引用
before = System.currentTimeMillis();
for(int i=0;i<10000000;i++){
String b = "a";
}
after = System.currentTimeMillis();
System.out.println(after - before);
感觉方式1耗时应该比方式2短,但运行结果与想象不符。
按照这篇文章对String 对象初始化的说明,本例中的String对象全部使用String池中缓存的对象“a”,这样方式1与方式2在初始化时没有区别; 但方式2维护了更多的局部变量(即对象引用),反而速度更快,是何原因?请高手指点。
相关文章推荐
- 标题: 优化 Java 垃圾收集的性能——如何利用 IBM Java 虚拟机检测和解决垃圾收集问题
- [转]使用CMS垃圾收集器产生的问题和解决方案
- HotSpot虚拟机的垃圾收集器
- 虚拟机3.3垃圾收集算法
- <<深入理解虚拟机>>笔记------垃圾收集器
- 深入java虚拟机 - 垃圾收集 - 按代收集的收集器
- Dalvik虚拟机垃圾收集机制简要介绍和学习计划
- 【理解HotSpot虚拟机】串行垃圾收集器Serial和Serial Old原理
- HotSpot虚拟机七种垃圾收集器学习笔记
- 搜狗浏览器中密码输入框那个虚拟机键盘的样式问题……
- 深入理解Java虚拟机3~垃圾收集器参数总结
- 细说Convert和Parse到底那个效率高!
- 深入理解JVM虚拟机学习笔记(二)垃圾收集器与垃圾收集算法
- 深入理解Java虚拟机JVM高级特性与最佳实践阅读总结——第三章垃圾收集器与内存分配策略
- 【深入Java虚拟机】之八:Java垃圾收集机制
- JVM中Hotspot虚拟机中时常被问及的垃圾收集算法和垃圾收集器
- 《深入理解 Java 虚拟机》- 笔记 - 垃圾收集算法
- 深入理解Java虚拟机笔记---垃圾收集算法
- 【读书笔记】深入理解Java虚拟机——垃圾收集
- Hotspot虚拟机- 垃圾收集算法和垃圾收集器