0

最近我正在做一个关于 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

关闭编译器模式......但这次我什至无法在堆上找到我的字符串变体......

我被困在这里两天了..有人可以帮我吗...?我真的很感激...

谢谢!

4

1 回答 1

1

我被困在这里两天了..有人可以帮我吗...?我真的很感激...

我将专注于您首先要解决的问题。也许您可以更清楚地说明为什么要在问题中这样做。

在 Windows 上,我关闭 -Djava.compiler=NONE

这只会改变代码编译为本机代码的方式。这不会以任何方式改变堆。

但是我找不到Java标准库的字节码序列..就像

字节码和类定义不在堆中,它们在 perm gen 中。

于 2013-10-18T15:17:02.310 回答