关于一个new新对象耗时问题
System.out.println(System.getProperty("java.version"));
System.out.println(System.currentTimeMillis());
System.out.println(new java.util.Date());
for(int i=0;i<1000000000;i++){
String str = new String("");
}
System.out.println(System.currentTimeMillis());
System.out.println(new java.util.Date());
System.out.println("----------------------");
System.out.println(System.currentTimeMillis());
System.out.println(new java.util.Date());
for(int i=0; i<1000000000;i++){
StringBuffer str = new StringBuffer("");
}
System.out.println(System.currentTimeMillis());
System.out.println(new java.util.Date());
System.out.println("----------------------");
System.out.println(System.currentTimeMillis());
System.out.println(new java.util.Date());
for(int i=0; i<1000000000;i++){
test1 t = new test1();
}
System.out.println(System.currentTimeMillis());
System.out.println(new java.util.Date());
我分别new 1亿个 String StringBuffer 和 test1 对象,结果如下:
(String)
1.5.0_11
1238639830062
Thu Apr 02 10:37:10 CST 2009
1238639834437
Thu Apr 02 10:37:14 CST 2009
----------------------
(StringBuffer)
1238639834437
Thu Apr 02 10:37:14 CST 2009
1238639874375
Thu Apr 02 10:37:54 CST 2009
----------------------
(test1)
1238639874375
Thu Apr 02 10:37:54 CST 2009
1238639875187
Thu Apr 02 10:37:55 CST 2009
我加到了10亿个,这个我是分开单个测试的,发现new StringBuffer 的耗时就远远大于其他那两个了,
new 10亿个的结果分别如下:
1.5.0_11
1238639226906
Thu Apr 02 10:27:06 CST 2009
1238639258796
Thu Apr 02 10:27:38 CST 2009
String 花了 差不多32秒
-------------------------
1.5.0_11
1238639380140
Thu Apr 02 10:29:40 CST 2009
1238639511687
Thu Apr 02 10:31:51 CST 2009
StringBuffer 花了 差不多2分钟19秒
----------------------
1.5.0_11
----------------------
1238639579843
Thu Apr 02 10:32:59 CST 2009
1238639588406
Thu Apr 02 10:33:08 CST 2009
test1对象花了 9秒
这是为什么呀,为什么StringBuffer比其他两个要多花那么多时间?
他在虚拟机中创建对象的时候和其他两个有什么区别吗 ?
...全文
相关推荐
PHP设计模式(四)原型模式Prototype实例详解【创建型】
**问题与解决方案**当创建新对象需要大量初始化工作,或者需要考虑多种状态组合时,直接new一个新对象可能过于耗时。
设计模式原型模式PPT学习教案.pptx
### 原型模式概述原型模式的概念源于孙悟空的“拔毛变小猴”的神话故事,这种能力在软件开发中被抽象为复制一个对象并生成与原对象相同的新对象。
Java实现的耗时统计类-可用于测试程序耗时
**结束计时**: 当操作完成后,调用另一个方法(如`stop()`)来记录结束时间。这样,我们就可以计算出操作的总耗时。3.
Skywalking链路追踪自身耗时和总耗时算法分析
一个Span可能有零个、一个或多个children Span。 自身耗时和总耗时的计算方法在Skywalking链路追踪中,自身耗时和总耗时是两个重要的概念。
spring boot高并发下耗时操作的实现方法
总结本文介绍了Spring Boot高并发下耗时操作的实现方法,通过使用DeferredResult实现异步处理,可以提高服务器的处理能力和可扩展性,对高并发场景下的耗时操作问题提供了一个解决方案。


Java SE
