相关疑难解决方法(0)

StringBuilder vs. .concat vs."+"运算符相对性能在eclipse中与命令行不同?

我正在阅读如何在可能的情况下java编译器将编译与"+"运算符连接的字符串编译成StringBuilder的实例,以及如何使用简单的"+"运算符,因为它们编译为相同的代码.(除非在while循环中构建字符串,在这种情况下,最好使用StringBuilder.)

我还读过字符串上的.concat方法一直是最糟糕的选择(以至于Findbugs将它变成了一个bug !).

所以我决定自己在eclipse中编写一个java类来测试它.我的结果让我感到有些惊讶.我发现不同的方法相对更快或更慢,如果我在eclipse中编译并运行它们而不是在命令行上运行它们.

首先我的日食结果是:

the total millis to concatenate with + was: 12154
the total millis to concatenate with .concat was: 8840
the total millis to concatenate with StringBuilder was: 11350
the total millis to concatenate with StringBuilder with a specified size was: 5611
Run Code Online (Sandbox Code Playgroud)

所以在eclipse中,指定大小的StringBuilder最快,然后是.concat(怪异),那么StringBuilder和"+"连接几乎是一样的.

但是,我在命令行上的结果是:

the total millis to concatenate with + was: 4139
the total millis to concatenate with .concat was: 8590
the total millis to concatenate with StringBuilder was: 10888 …
Run Code Online (Sandbox Code Playgroud)

java eclipse jvm

9
推荐指数
1
解决办法
8898
查看次数

Java用+优化字符串连接多少钱?

我知道在最近的Java版本中字符串连接

String test = one + "two"+ three;
Run Code Online (Sandbox Code Playgroud)

将优化使用a StringBuilder.

但是,StringBuilder每次遇到此行时都会生成一个新的,还是会生成一个Thread Local StringBuilder然后用于所有字符串连接?

换句话说,我是否可以通过创建自己的线程本地StringBuilder来重新使用经常调用的方法的性能,或者这样做会不会有显着的增益?

我可以为此编写一个测试,但我想知道它是否可能是编译器/ JVM特定的或者可以更普遍地回答的问题?

java string optimization stringbuilder string-concatenation

9
推荐指数
2
解决办法
1077
查看次数

性能(JAVA)〜循环中的字符串连接,带有前置和后置

我遇到了性能问题.有没有人有更快/更好的解决方案来执行以下操作:

    String main = "";
    for (String proposition : propositions) {
        if (main.length() == 0) {
            main = proposition;
        } else {
            main = "|(" + proposition + "," + main + ")";
        }
    }
Run Code Online (Sandbox Code Playgroud)

我知道concat和stringbuilder更快,但我不知道如何使用这些方法.由于以下代码行:

main = "|(" + proposition + "," + main + ")";
Run Code Online (Sandbox Code Playgroud)

提前致谢!

java string performance loops concatenation

9
推荐指数
2
解决办法
2002
查看次数

单行字符串连接的速度差异

所以我一直认为使用"+"运算符将Strings附加到单行上就像使用StringBuilder一样高效(并且在眼睛上肯定更好).今天虽然我在使用追加变量和字符串的Logger遇到了一些速度问题,但它使用的是"+"运算符.所以我做了一个快速的测试用例,我惊讶地发现使用StringBuilder更快!

基础是我使用每个附加数量的平均20次运行,有4种不同的方法(如下所示).

结果,时间(以毫秒为单位)

                                               # of Appends
                           10^1    10^2    10^3    10^4     10^5     10^6       10^7
StringBuilder(capacity)    0.65    1.25    2       11.7     117.65   1213.25    11570
StringBuilder()            0.7     1.2     2.4     12.15    122      1253.7     12274.6
"+" operator               0.75    0.95    2.35    12.35    127.2    1276.5     12483.4
String.format              4.25    13.1    13.25   71.45    730.6    7217.15    -

百分比图表与最快算法的差异.

字符串计时的差异百分比

我检查了字节码,每种字符串比较方法都不同.

这是我正在使用的方法,你可以在这里看到整个测试类.

public static String stringSpeed1(float a, float b, float c, float x, float y, float z){
    StringBuilder sb = new StringBuilder(72).append("[").append(a).append(",").append(b).append(",").append(c).append("][").
            append(x).append(",").append(y).append(",").append(z).append("]");
    return sb.toString(); …
Run Code Online (Sandbox Code Playgroud)

java string profiling append timing

8
推荐指数
1
解决办法
639
查看次数

值得拥有一个StringBuilder进行5次连接?

可能重复:
在什么时候使用StringBuilder变得无关紧要或开销?

相关/重复问题
字符串与StringBuilder
在什么时候使用StringBuilder变得无关紧要或开销?

尽可能简单,我有这个方法1:

cmd2.CommandText = ("insert into " + TableName + " values (" + string.Join(",", insertvalues) + ");");
Run Code Online (Sandbox Code Playgroud)

我想知道方法2是否会更快,如果我这样做:

StringBuilder sb2 = new StringBuilder();
sb2.Append("insert into ");
sb2.Append(TableName);
sb2.Append(" values (");
sb2.Append(string.Join(",", insertvalues));
sb2.Append(");");

cmd2.CommandText = sb2.ToString();
Run Code Online (Sandbox Code Playgroud)

c# java

7
推荐指数
1
解决办法
1164
查看次数

为什么char []比String更好? - Java

参考链接:文件IO调优,最后一节标题为"进一步调整",作者建议使用char []来避免为n文件中的行生成String对象,我需要了解它是怎么做的

char[] arr = new char{'a','u','t','h', 'o', 'r'}

与...不同

String s = "author"

在内存消耗或任何其他性能因素方面?String对象是否内部存储为字符数组?我觉得很傻,因为我以前从没想过这个.:-)

java string character

7
推荐指数
2
解决办法
4700
查看次数

Java减少CPU使用率

Greets-

我们在工作中使用了一些喜欢使用的疯子

while(true) { //Code } 
Run Code Online (Sandbox Code Playgroud)

在他们的代码中.你可以想象这会最大化CPU.有没有人知道降低CPU利用率的方法,以便其他人也可以使用服务器.

代码本身只是不断地在互联网上轮询网站上的更新.因此,我想一点睡眠方法会大大降低CPU使用率.

所有操作都在String对象(Java)中进行,任何人都知道StringBuilders会减少多少?

谢谢你的任何指示

java performance cpu-usage

6
推荐指数
2
解决办法
1万
查看次数

哪个toString()方法可以使用性能明智?

我正在开发一个性能增强项目.我有一个疑问,当我们在一个过程中,我们倾向于追踪DTO和所用实体的当前状态.因此,为此,我们在所有POJO中都包含了toString()方法.我现在用以下三种不同的方式实现toString(): -

public String toString() {
    return "POJO :" + this.class.getName() + " RollNo :" + this.rollNo + " Name :" + this.name;
}

public String toString() {
    StringBuffer buff = new StringBuffer("POJO :").append(this.class.getName()).append(" RollNo :").append(this.rollNo).append(" Name :").append(this.name);
    return buff.toString();
}

public String toString() {
        StringBuilder builder = new StringBuilder("POJO :").append(this.class.getName()).append(" RollNo :").append(this.rollNo).append(" Name :").append(this.name);
        return builder .toString();
    }
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我找出哪一个是最好的,应该用于提高性能.

java performance

6
推荐指数
2
解决办法
3087
查看次数

为什么使用一个"打印"而不是三个工作?

所以我对Java知之甚少,但我注意到这根据我的课堂笔记有用,我应该以不同的方式做

这是我的笔记

System.out.print("hello");
System.out.print(name);
System.out.print("\n");
Run Code Online (Sandbox Code Playgroud)

但是我尝试了这个,它也做了同样的事情.它更短,所以这是一种可接受的方式,还是会打破这条路?

System.out.print("hello"+name+"\n);
Run Code Online (Sandbox Code Playgroud)

只要代码运行正确,我的老师也不应该在意吗?这是我的第一堂课,我不是计算机科学专业.

java string

6
推荐指数
1
解决办法
106
查看次数

Java记录器使用...功能

Java logger允许以下语法:

m_logger.info("ID: {} NAME: {}", id, name);    // 1
m_logger.info("ID: " + id + " NAME: " + name); // 2
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,基本上我们调用...函数,因此Object[]每次都会创建一个new .

我跑过YourKit,这就是我所看到的.

我的问题是,第一种情况不是我们应该一直避免的昂贵操作吗?但是我已经在很多代码中看到了这一点.使用#1我们获得了什么?

我想我们应该使用StringBuilder最佳性能?

java logging

6
推荐指数
2
解决办法
143
查看次数