java new String(byte)当参数和String引用当参数有什么区别,为什么性能差别很大?
ringa_lee
ringa_lee 2017-04-18 09:55:19
0
1
663
byte[] test = (sb.toString()).getBytes();
testString(new String(test));

相对于:

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

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

ringa_lee
ringa_lee

ringa_lee

membalas semua(1)
Ty80

Jika anda tidak tahu apa-apa tentang JVM, adalah disyorkan untuk tidak bercakap tentang prestasi dan prestasi tidak diukur dengan cara ini.

Parameter dan pembolehubah tempatan kaedah

sepadan dengan jadual pembolehubah tempatan 3 dalam tindanan mesin maya 1 bingkai tindanan 2 Jenis rujukan yang diduduki SLOT slot, jadi Perbezaan antara cara penulisan kedua anda ialah bingkai tindanan mempunyai satu lagi slot Selepas mencipta objek String, rujukan objek adalah pada tindanan operan 4 disimpan ke jadual pembolehubah tempatan melalui arahan aload dan kaedah testString dipanggil Apabila menggunakan arahan aload, tolaknya ke bahagian atas tindanan operan.

Ringkasan: Terdapat satu lagi SLOT dalam bingkai tindanan dan dua lagi arahan dalam panggilan kaedah Arahan yang berlebihan akan dihapuskan selepas pemanasan JIT Tiada perbezaan sebenar.


  1. 2.5.2 Timbunan Mesin Maya Java ↩
  2. 2.6. Bingkai ↩
  3. 2.6.1 Pembolehubah Setempat ↩
  4. 2.6.2 Timbunan Operand ↩
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan