最近我正在做一个关于 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..”的序列(与我的私有字符串变体匹配)并找到我的代码片段的字节码序列。
但是我找不到Java标准库的字节码序列..就像
Java.Lang.Obeject
Java.Lang.Math
怎么了..?以我的理解,我认为我应该在 JVM 的堆中找到它们的字节码序列。
然后我用JRocket再做一次..使用
-Djava.compiler=NONE
关闭编译器模式......但这次我什至无法在堆上找到我的字符串变体......
我被困在这里两天了..有人可以帮我吗...?我真的很感激...
谢谢!