最近、JVM とバイトコードの実験を行っています。
これらのコード スニペットを使用してテストします。
import java.util.*;
public class Simple {
private String a = "abcdefghijklmnopaqrstuvwaxyazaaabcdefghijklmnopaqrstuvwaxyazaabcdefghijklmnopaqrstuvwaxyazaabcdefghijklmnopaqrstuvwaxyaz";
public int test()
{
String bb = "abcdefghijklmnopaqrstuvwaxyazaaabcdefghijklmnopaqrstuvwaxyazaabcdefghijklmnopaqrstuvwaxyazaabcdefghijklmnopaqrstuvwaxyaz";
int a = 0;
int b = a;
int c = a + b;
return c;
}
public static void main(String[] args)
{
String cc = "abcdefghijklmnopaqrstuvwaxyazaaabcdefghijklmnopaqrstuvwaxyazaabcdefghijklmnopaqrstuvwaxyazaabcdefghijklmnopaqrstuvwaxyaz";
Simple simple = new Simple();
simple.test();
Scanner input=new Scanner(System.in);
System.out.println("how much money do you need?");
double number=input.nextDouble();
}
}
まず、HotSpot を使用して実験を行います。Windows では、
-Djava.compiler=NONE
HeapMemView を使用して HotSpot のヒープ メモリを表示します。「6162 6364 ..」のシーケンス (これは、私のプライベート String バリアントと一致します) を見つけて、コード スニペットのバイトコード シーケンスを見つけることができます。
しかし、Java標準ライブラリのバイトコードシーケンスが見つかりません..のように
Java.Lang.Obeject
Java.Lang.Math
どうしたの..?私の理解では、JVMのヒープでバイトコードシーケンスを見つける必要があると思います..
次に、JRocket を使用してもう一度実行します。
-Djava.compiler=NONE
コンパイラモードをオフにするには...しかし、今回はヒープ上で文字列バリアントを見つけることさえできません....
私はここに 2 日間閉じ込められています..誰か助けてくれませんか..?本当に本当に感謝しています...
ありがとうございました!