Dec 10, Be careful use string append

I was implmenting string append feature in my simple VM.

 

I find that when there are string append in JAVA code. The binary codes generated are not the same as I thought.

 

I use a simple test to test it.

	private static void testAdd() {
		String a = "First";
		String b = "Second";
		String c = a + b;
		Asserter.assertTrue(c.equals("FirstSecond"), "testAddEqual");
		Asserter.assertTrue(!c.equals("First"), "testAddNotEqual");
	}

 

The sentence following will generate quite lot of binary code. The most important thing for performance is it use StringBuffer. Yes, it is StringBuffer. So it has performance issue.

 

String c = a + b;

The codes generated are listed following.

     6  new java.lang.StringBuffer [25]
     9  dup
    10  aload_0 [a]
    11  invokestatic java.lang.String.valueOf(java.lang.Object) : java.lang.String [27]
    14  invokespecial java.lang.StringBuffer(java.lang.String) [33]
    17  aload_1 [b]
    18  invokevirtual java.lang.StringBuffer.append(java.lang.String) : java.lang.StringBuffer [36]
    21  invokevirtual java.lang.StringBuffer.toString() : java.lang.String [40]
    24  astore_2 [c]

 method StringBuffer.append is synchronized method. So be careful.

 

Following code also do the same thing. It also use StringBuffer

		String a = "String";
		a = a + 100;
 

Perhaps use some java compiler optimization will make it more efficiently. But I don't have time test it by now.

 

 

你可能感兴趣的:(java,C++,c,C#,performance)