首页 > 编程语言 > 详细

简单的java内存机制

时间:2020-01-31 18:38:03      阅读:64      评论:0      收藏:0      [点我收藏+]

java内存管理不简单,这里只简单介绍栈、堆、方法区三种,用来解释java程序的运行流程。

 

堆:

  用来装载java对象

栈:

  用来装载局部变量和方法的调用,每一个方法的调用载入一块栈帧,栈信息的出入原则与子弹夹类似,先进后出。

方法区:

  存储一些公有信息,多个对象可能共同使用的信息,方法结构、静态变量等

 

 

使用下面程序作为例子:

class Dog{
   String name;
   int age;

   public void bark(){
     System.out.println("汪汪");
   }  
}

class TestDog{
   public static void main(String[] args){
      Dog  d = new Dog();
      d.name = "大黄";
      d.age = 10;
      d.bark();  
   }
}

  

技术分享图片

 

 

1、装载类,方法区中有Dog类的方法信息

2、装载main方法,栈帧中出现main栈帧

3、执行new Dog赋值给d,堆中创造0x001对应对象连接到d,并且属性初始化值

 

技术分享图片

 

 4、d对象给name、age属性赋值,对象的成员变量值存储到对象中,方法不存储,引用数据类型存储的是引用地址

5、执行到bark()方法,在占中加入bark的栈帧,cpu执行权转到bark,输出汪汪

技术分享图片

 

 6、bark方法执行完毕,bark栈帧移除,cpu再次回到main方法

7、main方法执行完毕移除,d对象没有了对应变量连接,等待垃圾回收器处理。

 

 

 

 

 

注意点:

  这里的方法调用没有参数,如果有参数的方法调用传递的参数实际上是实参的拷贝值。因为引用数据类型的值其实是对象的地址值,所以引用数据类型参数传递到方法中依旧能影响到同一个对象。

  java程序执行有寄存器,有执行指针的类似概念,每个方法执行,就需要加入栈帧,执行完毕消亡则移除栈帧,当然栈帧中的局部变量一块消亡。

  方法调用就是一种堆栈的形式,cpu永远先执行顶上的栈帧

 

简单的java内存机制

原文:https://www.cnblogs.com/aigeileshei/p/12245890.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!