java字符串性能的问题

问题描述

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))

时间: 2024-11-01 23:44:14

java字符串性能的问题的相关文章

Java字符串性能优化

1.字符串连接,使用StringBuilder替代"+"号 建议:创建指定初始容量的StringBuilder(非线程安全,优先)或StringBuffer(线程安全)对象,使用append方法连接字符串. 禁止:使用多个"+"号连接String. 原因:由于String为不可变类,每次使用"+"号连接两个String对象,结果会产生一个新的String对象:多次使用"+"号连接中间结果会产生很多无用的String对象,占用过

Java程序性能优化(辛苦了几个小时,还经历了一次停电,我真是命苦!)

程序|性能|优化 Java程序性能优化 一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子:import java.util.Vector;class CEL {    void method (Vector vector) {        for (int i = 0; i < vector.size (); i++)  // Violation            ; //

java字符串连接String、StringBuffer和StringBuilder

Java字符串连接再开发中随时用的,方法很多: 先看下下边的代码: package com.meiyabaike.classx; public class ClassxMathCalculate { public static void main(String[] args) { int i1 = 10; int i2 = 20; System.out.println("resultx1 :"+i1+i2); //Error: the operator - is undefined f

java 程序性能优化《第二章》设计优化 2.1善用设计模式 1 单例模式

java 程序性能优化<第二章>设计优化 2.1善用设计模式 1 单例模式 设计模式是前人工作的总结和提炼.通常,被人们广泛流传的设计模式都是对某一特定问题的成熟的解决方案.如果能合理的使用设计模式,不仅能使系统更容易被他人理解,同时也能使系统拥有更加合理的结构.本节总结归纳了一些经典的设计模式,并详细说明它们与软件性能之间的关系. 2.1.1 单例模式 单例模式是设计模式中使用最为普遍的模式之一.它是一种对象创建模式,用于生产一个对象的具体实现,它可以确保系统中一个类只产生一个实例.在Jav

为什么Java字符串是不可变对象?

本文主要来介绍一下Java中的不可变对象,以及Java中String类的不可变性,那么为什么Java的String类是不可变对象?让我们一起来分析一下. 答案一: 最流行的Java面试题之一就是:什么是不可变对象(immutable object),不可变对象有什么好处,在什么情况下应该用,或者更具体一些,Java的String类为什么要设成immutable类型? 不可变对象,顾名思义就是创建后不可以改变的对象,典型的例子就是Java中的String类. String s = "ABC&quo

Java日志性能那些事

在任何系统中,日志都是非常重要的组成部分,它是反映系统运行情况的重要依据,也是排查问题时的必要线索.绝大多数人都认可日志的重要性,但是又有多少人仔细想过该怎么打日志,日志对性能的影响究竟有多大呢?今天就让我们来聊聊Java日志性能那些事. DEBUG级别的日志在生产环境中不会输出到文件中,也可能带来不小的开销.我们撇开判断和方法调用的开销,在Log4J 2.x的性能文档中 有这样一组对比:logger.debug("Entry number: " + i + " is &qu

Java字符串拼接效率分析及最佳实践

本文来源于问题 Java字符串连接最佳实践? java连接字符串有多种方式,比如+操作符,StringBuilder.append方法,这些方法各有什么优劣(可以适当说明各种方式的实现细节)? 按照高效的原则,那么java中字符串连接的最佳实践是什么? 有关字符串处理,都有哪些其他的最佳实践? 废话不多说,直接开始, 环境如下: JDK版本: 1.8.0_65 CPU: i7 4790 内存: 16G 直接使用+拼接 看下面的代码: @Test      public void test() {

java 字符串内存分配的分析与总结(推荐)_java

经常在网上各大版块都能看到对于java字符串运行时内存分配的探讨,形如:String a = "123",String b = new String("123"),这两种形式的字符串是存放在什么地方的呢,其实这两种形式的字符串字面值"123"本身在运行时既不是存放在栈上,也不是存放在堆上,他们是存放在方法区中的某个常量区,并且对于相同的字符串字面值在内存中只保留一份.下面我们将以实例来分析. 1.==运算符作用在两个字符串引用比较的两个案例: p

Java日志性能那些事(转)

在任何系统中,日志都是非常重要的组成部分,它是反映系统运行情况的重要依据,也是排查问题时的必要线索.绝大多数人都认可日志的重要性,但是又有多少人仔细想过该怎么打日志,日志对性能的影响究竟有多大呢?今天就让我们来聊聊Java日志性能那些事. 说到Java日志,大家肯定都会说要选择合理的日志级别.合理控制日志内容,但是这仅是万里长征第一步--哪怕一些DEBUG级别的日志在生产环境中不会输出到文件中,也可能带来不小的开销.我们撇开判断和方法调用的开销,在Log4J 2.x的性能文档中有这样一组对比: