最近我正在对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
转换编译器模式......但这次我甚至无法在堆上找到我的String变体....
我被困在这里两天..有人可以给我一些帮助......?我真的很感激...
谢谢!
答案 0 :(得分:1)
我被困在这里两天..有人可以给我一些帮助......?我真的很感激...
我会专注于您首先尝试解决的问题。也许你可以更明确地说明你为什么要在这个问题上这样做。
在Windows上,我删除-Djava.compiler = NONE
这只会改变代码编译为本机代码的方式。这不会以任何方式改变堆。
但是我找不到Java标准库的字节码序列..比如
字节代码和类定义不在堆中,它们位于perm gen中。