个人随笔
目录
JVM(二)、Java堆、方法区、栈之间的关系
2021-02-26 21:50:36

我们知道,Java堆中放的是对象,方法区中放的是常量,静态变量,类元信息,虚拟机栈中
放的是栈帧,那么这三者之间有啥关系呢?

我们看下如下代码,可能例子不是太好,请见谅:

  1. public class Math {
  2. private static Math math = new Math();
  3. public int compute() {
  4. int a = 1;
  5. int b = 2;
  6. int c = (a+b)*10;
  7. return c;
  8. }
  9. public static void main(String[] args) {
  10. Math math = new Math();
  11. math.compute();
  12. }
  13. }

箭头1

类装载子系统将Math.class装载进入JVM虚拟机中,其中Math.class的相关元信息,
静态变量math放在方法区中,但是静态变量math是一个对象,所以对象放在堆中

箭头2

程序执行到main方法的时候,会再虚拟机栈,中创建一个栈帧,栈帧中的局部变量表中会有一个对象的引用math,而对象也存在堆中

箭头3

在执行到math.compute()方法的时候,需要去堆的math对象头中获取指向方法区的元信息,然后找到符号引用
转换为直接引用(该过程为动态链接)

 185

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2