我正在阅读如何在可能的情况下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版本中字符串连接
String test = one + "two"+ three;
Run Code Online (Sandbox Code Playgroud)
将优化使用a StringBuilder.
但是,StringBuilder每次遇到此行时都会生成一个新的,还是会生成一个Thread Local StringBuilder然后用于所有字符串连接?
换句话说,我是否可以通过创建自己的线程本地StringBuilder来重新使用经常调用的方法的性能,或者这样做会不会有显着的增益?
我可以为此编写一个测试,但我想知道它是否可能是编译器/ JVM特定的或者可以更普遍地回答的问题?
我遇到了性能问题.有没有人有更快/更好的解决方案来执行以下操作:
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)
提前致谢!
所以我一直认为使用"+"运算符将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) 相关/重复问题
字符串与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) 参考链接:文件IO调优,最后一节标题为"进一步调整",作者建议使用char []来避免为n文件中的行生成String对象,我需要了解它是怎么做的
char[] arr = new char{'a','u','t','h', 'o', 'r'}
与...不同
String s = "author"
在内存消耗或任何其他性能因素方面?String对象是否内部存储为字符数组?我觉得很傻,因为我以前从没想过这个.:-)
Greets-
我们在工作中使用了一些喜欢使用的疯子
while(true) { //Code }
Run Code Online (Sandbox Code Playgroud)
在他们的代码中.你可以想象这会最大化CPU.有没有人知道降低CPU利用率的方法,以便其他人也可以使用服务器.
代码本身只是不断地在互联网上轮询网站上的更新.因此,我想一点睡眠方法会大大降低CPU使用率.
所有操作都在String对象(Java)中进行,任何人都知道StringBuilders会减少多少?
谢谢你的任何指示
我正在开发一个性能增强项目.我有一个疑问,当我们在一个过程中,我们倾向于追踪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知之甚少,但我注意到这根据我的课堂笔记有用,我应该以不同的方式做
这是我的笔记
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 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最佳性能?