Java中的成员变量的引用存放在栈的啥位置

栈的结构可以使用HSDB查看来解决疑惑:1.先用jps来查看当前运行中的java线程id(这里的java程序是运行在mixed mode下),然后输入:sudo java -cp .:$JAVA_HOME/lib/sa-jdi.jar sun.jvm.hotspot.HSDB打开HSDB,然后输入想要查看的java线程id进行attach,会显示如下页面:Java中的成员变量的引用存放在栈的啥位置

选中main然后点击红圈标示的那个按钮,就会打开下边这个窗口:Java中的成员变量的引用存放在栈的啥位置
【Java中的成员变量的引用存放在栈的啥位置】
上图是运行在解释模式下的栈结构。贴一下main函数的代码:public static void main(String args) { String s = "a"; String s2 = new String(s); String s3 = new String("a"); System.out.println(s2.equals(s3)); }可以看到最下面4个位于新生代的对象从下往上就是args、s、s2、s3的引用(具体对应关系可以用javap -v中查看),再往上就是一些HotSpot内部对象,比如用来表示方法的Method对象、常量池缓存、bytecode ptr、锁记录之类(如果有锁的话)的,最上面就是操作数栈。


    推荐阅读