byte[] test = (sb.toString()).getBytes();
testString(new String(test));
相对于:
byte[] test = (sb.toString()).getBytes();
String temp = new String(test);
testString(temp);
这样有什么区别?为什么第一种比第二种性能方面低很多,而且会有莫名其妙的异常。出问题经常的由于byte[]数组比较大。小的时候看不出来问题。
PHP中文网2017-04-18 09:57:19
JVM에 대해 아무것도 모른다면 성능에 대해 이야기하지 않는 것이 좋으며 이러한 방식으로 성능을 측정하지는 않습니다.
메소드의 매개변수와 지역변수는 가상머신 스택1 스택 프레임2의 지역변수 테이블 3에 해당한다. 하나의 슬롯 SLOT이므로 두 번째 작성 방법의 차이점은 스택 프레임에 슬롯이 하나 더 있다는 것입니다. String
객체를 생성한 후 객체의 참조는 피연산자 스택 4에 있습니다. . aload
명령어를 통해 지역 변수 테이블에 저장되며, aload
명령어를 사용할 때는 피연산자 스택의 맨 위로 푸시됩니다.
요약: 스택 프레임에 SLOT이 하나 더 있고 메서드 호출에 명령어가 두 개 더 있습니다. 중복 명령어는 JIT 준비 후에 제거됩니다.