java new String(byte)当参数和String引用当参数有什么区别,为什么性能差别很大?
ringa_lee
ringa_lee 2017-04-18 09:55:19
0
1
661
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

répondre à tous(1)
Ty80

Si vous ne connaissez rien à JVM, il est recommandé de ne pas parler de performances, et les performances ne sont pas mesurées de cette façon.

Les paramètres et variables locales de la méthode

correspondent à la table de variables locales 3 dans la pile de machine virtuelle 1 cadre de pile 2 Le type de référence occupe. un slot SLOT, donc La différence entre votre deuxième façon d'écrire est que le cadre de pile a un slot supplémentaire après avoir créé l'objet String, la référence de l'objet est sur la pile d'opérandes 4. est enregistré dans la table des variables locales via l'instruction aload et la méthode testString est appelée. Lorsque vous utilisez l'instruction aload, placez-la en haut de la pile d'opérandes.

Résumé : il y a un SLOT supplémentaire dans le cadre de pile et deux instructions supplémentaires dans l'appel de méthode. Les instructions redondantes seront éliminées après l'échauffement JIT.


  1. 2.5.2. Piles de machines virtuelles Java ↩
  2. 2.6. Cadres ↩
  3. 2.6.1. Variables locales ↩
  4. 2.6.2. Piles d'opérandes ↩
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal