찾다

 >  Q&A  >  본문

java new String(byte)当参数和String引用当参数有什么区别,为什么性能差别很大?

byte[] test = (sb.toString()).getBytes();
testString(new String(test));

相对于:

byte[] test = (sb.toString()).getBytes();
String temp = new String(test);
testString(temp);

这样有什么区别?为什么第一种比第二种性能方面低很多,而且会有莫名其妙的异常。出问题经常的由于byte[]数组比较大。小的时候看不出来问题。

ringa_leeringa_lee2837일 전680

모든 응답(1)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-18 09:57:19

    JVM에 대해 아무것도 모른다면 성능에 대해 이야기하지 않는 것이 좋으며 이러한 방식으로 성능을 측정하지는 않습니다.

    메소드의 매개변수와 지역변수는 가상머신 스택1 스택 프레임2의 지역변수 테이블 3에 해당한다. 하나의 슬롯 SLOT이므로 두 번째 작성 방법의 차이점은 스택 프레임에 슬롯이 하나 더 있다는 것입니다. String 객체를 생성한 후 객체의 참조는 피연산자 스택 4에 있습니다. . aload 명령어를 통해 지역 변수 테이블에 저장되며, aload 명령어를 사용할 때는 피연산자 스택의 맨 위로 푸시됩니다.

    요약: 스택 프레임에 SLOT이 하나 더 있고 메서드 호출에 명령어가 두 개 더 있습니다. 중복 명령어는 JIT 준비 후에 제거됩니다.


    1. 2.5.2. 자바 가상 머신 스택 ↩
    2. 2.6.프레임 ↩
    3. 2.6.1. 지역변수 ↩
    4. 2.6.2. 피연산자 스택 ↩

    회신하다
    0
  • 취소회신하다