Java对象创建内存 Java对象创建内存案例解析

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

Java对象创建内存 Java对象创建内存案例解析

小炭在努力   2021-08-03 我要评论
想了解Java对象创建内存案例解析的相关内容吗,小炭在努力在本文为您仔细讲解Java对象创建内存的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Java对象创建内存,Java对象创建内存讲解,下面大家一起来学习吧。

Java对象创建内存图解析

1. 栈

  • Java栈的区域很小 , 特点是存取的速度特别快,栈存储的特点是, 先进后出,存储速度快的原因: 栈内存, 通过 栈指针'来创建空间与释放空间,指针向下移动, 会创建新的内存, 向上移动, 会释放这些内存。这种方式速度特别快 , 仅次于PC寄存器,但是这种移动的方式, 必须要明确移动的大小与范围 ,明确大小与范围是为了方便指针的移动 , 这是一个对于数据存储的限制, 存储的数据大小是固定的 , 影响了程序的灵活性。 所以我们把更大部分的数据 存储到了堆内存中存储的是:基本数据类型的数据 以及 引用数据类型的引用。

例如:
int a =10;
Person p = new Person();
10存储在栈内存中 , 第二句代码创建的对象的引用§存在栈内存中

2. 堆

  • 堆存放的是类的对象 ,Java是一个纯面向对象语言, 限制了对象的创建方式:所有类的对象都是通过new关键字创建new关键字, 是指告诉JVM, 需要明确的去创建一个新的对象 , 去开辟一块新的堆内存空间,堆内存与栈内存不同, 优点在于我们创建对象时 , 不必关注堆内存中需要开辟多少存储空间 , 也不需要关注内存占用时长,堆内存中内存的释放是由GC(垃圾回收器)完成的垃圾回收器 回收堆内存的规则:当栈内存中不存在此对象的引用时,则视其为垃圾 , 等待垃圾回收器回收 。

3. 方法区

方法区存放的是:

  • 类信息
  • 静态的变量
  • 常量
  • 成员方法
    方法区中包含了一个特殊的区域 ( 常量池 )(存储的是使用static修饰的成员)

创建内存栈、堆、方法区图析

举个例子如下图:

在这里插入图片描述

对象的引用存放在栈中,new创建Book()对象在堆内存中开辟了一段内存,内存都是有地址的假设为0x123,栈内存中存储了地址,地址指向堆内存,获取了对象Book的属性name、info,并赋值为"计算机",“计算机书籍”,如图示:

在这里插入图片描述

接着BOOK book2 = book1,在栈内存中又创建了一个区域,这个区域就是book2,也拿到book1的地址,通过book2调用将name改为"Java",接着在调用方放say()。整个过程如图示:

在这里插入图片描述

结果如下:

在这里插入图片描述

  • 方法结束整个过程完成后,变量对象使用完毕,因为它的作用域就这么大,将会被释放,book2,book1先后出栈释放,紧接着堆内存的对象没有任何栈内存指向它,最后交给交给GC垃圾回收期处理。

这就是Java对象创建内存到释放内存的一个过程。

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们