问题描述
package com.hhb.base;public class StringTest2 {/** * @param args */public static void main(String[] args) {long start=System.currentTimeMillis();String hello="Hello";for(int i=0;i<100;i++){hello+=hello;}long end=System.currentTimeMillis(); System.out.println("String 累加消耗时间:"+(end-start));start=System.currentTimeMillis();StringBuffer buffer=new StringBuffer();for(int i=0;i<10;i++){buffer.append("hello").append(i);}end=System.currentTimeMillis(); System.out.println("String 累加消耗时间:"+(end-start));start=System.currentTimeMillis();StringBuilder builder=new StringBuilder();for(int i=0;i<1000;i++){builder.append("hello").append(i);}end=System.currentTimeMillis();System.out.println("String 累加消耗时间:"+(end-start));}}Exception in thread "main" java.lang.OutOfMemoryError: Java heap spaceat java.util.Arrays.copyOfRange(Arrays.java:3209)at java.lang.String.<init>(String.java:215)at java.lang.StringBuilder.toString(StringBuilder.java:430)at com.hhb.base.StringTest2.main(StringTest2.java:13)碰到问题无解...eclipse配置:-startupplugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar--launcher.libraryplugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.200.v20090519-productorg.eclipse.epp.package.jee.product--launcher.XXMaxPermSize256M-showsplashorg.eclipse.platform--launcher.XXMaxPermSize256m-vmargs-Dosgi.requiredJavaVersion=1.5-Xms256m-Xmx512m-XX:+PrintGCTimeStamps-XX:+PrintGCDetails-verbose:gc-Xloggc:gc.log-XX:PermSize=96m-XX:MaxPermSize=96m-XX:+DisableExplicitGC问题补充dennis_zane 写道
解决方案
跟性能没什么关系,问题是这段代码: String hello="Hello"; for(int i=0;i<100;i++){ hello+=hello; } hello是以指数级增长的,不用99次方就撑爆内存了。
解决方案二:
StringBuffer
解决方案三:
当线程情况下,请用StringBuilder代替,多线程共享访问请用StringBuffer代替。
解决方案四:
Try itSTR = 'a'for i in range(0, 10): STR += STR print(len(STR))