1 JVM内存

  分为“堆”、“栈”和“方法区”三个区域,分别用于存储不同的数据

  1.1 堆

    JVM在其内存空间开辟一个称为”堆”的存储空间,这部分空间用于存储使用new关键字所创建的对象。

  1.2 栈

    JVM在其内存空间开辟一个称为”栈”的存储空间,这部分空间用于存储程序运行时在方法中声明的所有局部变量。

  1.3 方法区

    方法区用于存放类的信息,Java程序运行时,首先会通过类装载器载入类文件的字节码信息,经过解析后将其装入方法区,类的各种信息(包括方法)都在方法区存储。

 

2 对象的生命周期

  2.1 使用new运算符创建对象

    2.1.1 Java虚拟机先检查类是否加载, 如果没有加载就加载类信息到方法区

    2.1.2 根据类信息中的属性定义在堆内存中开辟存储空间, 并且每个属性有默认值

    2.1.3 调用构造器, 执行构造器中属性初始化过程, 构造器结束时候, 释放构造器中全部的局部变量

    2.1.4 new运算返回对象的引用(即:对象在堆中的地址)

  2.2 利用引用操作使用对象 - 使用引用操作对象: 访问对象的属性和方法. - 可以反复更改对象的属性状态.

  2.3 对象在不被引用时候被垃圾回收器回收 - 当一个对象不再被引用时候, 对象就称为内存垃圾. 内存垃圾在适当时候被垃圾回收器回收.

  2.4 注意

    2.4.1 对象生存期中构造器只能执行一次. 在对象生存期间, 可以反复调用其方法, 反复访问其属性. 

    2.4.2 对象的属性随着对象在堆中分配.

  2.5 图片示意图

    JVM的内存管理、对象的生命周期、内存泄漏

  2.6 代码实现

 1 public class Demo {
 2     public static void main(String[] args) {
 3         //对象的生命周期
 4         Circle c1 = new Circle(3, 4, 5);
 5         System.out.println(c1);
 6         Circle c2 = new Circle(3, 4, 6);
 7         System.out.println(c2);
 8         //将引用赋值为null, 对象不再被引用
 9         //对象变成内存垃圾, 将被垃圾回收器回收.
10         c1=null;
11         c2=null;
12     }
13 }
14 class Circle{
15     int x,y,r;
16 
17     public Circle(int x, int y, int r) {
18         this.x = x;
19         this.y = y;
20         this.r = r;
21     }
22 
23     public String toString() {
24         return x+","+y+","+r;
25     }
26 }
View Code

相关文章:

  • 2021-05-03
  • 2022-12-23
  • 2021-10-10
  • 2021-11-21
  • 2021-05-30
  • 2022-12-23
  • 2021-05-19
  • 2021-08-11
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-30
  • 2021-07-25
  • 2021-10-15
  • 2021-11-13
相关资源
相似解决方案