0

我编写了一个简单的程序来了解 VisualVM 的工作原理。这是完整的代码:

package memorygames;
public class MemoryGames
{
   static class A {
       private int i;
       private String s;

       A(int i, String s)
       {
           this.i = i;
           this.s = s;
       }

       public int getI()
       {
           return i;
       }

       public String getS()
       {
           return s;
       }
   }

    public static void main(String[] args) {
        A a = new A(23, "hello");
        while(true) {
            System.out.println(a.getS());
            try
            {
                Thread.sleep(1000);
            }
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }
        }
    }
}

现在我在 VisualVM 中创建了我的应用程序的 HeapDump。我看到了我的“A”类的实例,但是 s 变量是空的!它的值等于null。'i' 变量保存正确的值 23。

为什么会发生这种情况?

更新:可能是我在滥用 VisualVM?这是我的截图: http: //oi42.tinypic.com/2091qfl.jpg

更新:不确定,但这可能是一些内存优化的结果。我已经添加了

 while(true) {
            a.setS(new String("a-setter " + Math.random()));
            (...)
}

...现在我可以看到变量中的字符串值。我想知道其他人是否真的可以看到堆中的结果与我的不同。

4

1 回答 1

0

这可能是您用于运行示例的 JDK 的问题。你可以尝试不同版本的JDK吗?JDK 7u40 还是 JDK 8 预览版?它适用于我使用 JDK 7u40。

于 2013-09-26T05:53:58.563 回答