byte[] test = (sb.toString()).getBytes(); testString(new String(test));
相对于:
byte[] test = (sb.toString()).getBytes(); String temp = new String(test); testString(temp);
这样有什么区别?为什么第一种比第二种性能方面低很多,而且会有莫名其妙的异常。出问题经常的由于byte[]数组比较大。小的时候看不出来问题。
ringa_lee
JVM について何も知らない場合は、パフォーマンスについて話さないことをお勧めします。また、パフォーマンスはこの方法では測定されません。
メソッドのパラメーターとローカル変数は、仮想マシン スタック 1 スタック フレーム 2 のローカル変数テーブル 3 に対応します。参照型が占有します。スロット SLOT なので、2 番目の書き方の違いは、String オブジェクトを作成した後、オブジェクトの参照がオペランド スタック 4 にあることです。 aload 命令を使用してローカル変数テーブルに保存され、testString メソッドが呼び出されます。aload 命令を使用する場合は、それをオペランド スタックの先頭にプッシュします。
String
aload
概要: スタック フレームにスロットが 1 つ増え、メソッド呼び出しに命令が 2 つ増えます。JIT ウォームアップ後には、冗長な命令が削除されます。実際には違いはありません。
JVM について何も知らない場合は、パフォーマンスについて話さないことをお勧めします。また、パフォーマンスはこの方法では測定されません。
メソッドのパラメーターとローカル変数は、仮想マシン スタック 1 スタック フレーム 2 のローカル変数テーブル 3 に対応します。参照型が占有します。スロット SLOT なので、2 番目の書き方の違いは、
String
オブジェクトを作成した後、オブジェクトの参照がオペランド スタック 4 にあることです。aload
命令を使用してローカル変数テーブルに保存され、testString メソッドが呼び出されます。aload
命令を使用する場合は、それをオペランド スタックの先頭にプッシュします。概要: スタック フレームにスロットが 1 つ増え、メソッド呼び出しに命令が 2 つ増えます。JIT ウォームアップ後には、冗長な命令が削除されます。実際には違いはありません。