Java面向对象之——创建对象内存分析;入门级讲解进来就能看懂

写在前面的话

Java中的不同数据存储在不同的存储区中,今天是将Java的面向对象,所以只介绍和其相关的三种内存区:栈、堆、方法区



栈特点

栈的特点的先进后出,响应速度特别快。

存储速度快的原因:

栈内存, 通过 ‘栈指针’ 来创建空间与释放空间 !

指针向下移动, 会创建新的内存, 向上移动, 会释放这些内存 !以此实现先进后出

这种方式速度特别快 , 仅次于PC寄存器 !

值得注意的是,这种移动的方式, 必须要明确移动的大小与范围 ,明确大小与范围是为了方便指针的移动 , 这是一个对于数据存储的限制, 存储的数据大小是固定的 , 影响了程序的灵活性 ~

所以我们把更大部分的数据 存储到了堆内存中。


栈存储

在面向对象中,栈存储的是基本数据类型的数据,以及引用数据类型的引用!

例如:

int a =10;

Person p = new Person(); 存储了p的地址。

栈存储数据类型的引用,就是存储了该数据类型的起始地址,而该数据类型真正这存储在其他存储区中。并通过先进后出的特点来实现对数据的调用顺序。


存放的是类的对象。

Java是一个纯面向对象语言, 限制了对象的创建方式。所以所有类的对象都是通过new关键字创建。new关键字, 是指告诉JVM , 需要明确的去创建一个新的对象 , 去开辟一块新的堆内存空间:

堆内存与栈内存不同, 优点在于我们创建对象时 , 不必关注堆内存中需要开辟多少存储空间 , 也不需要关注内存占用时长 !

堆内存中内存的释放是由GC(垃圾回收器)完成的。垃圾回收器回收堆内存的规则:

当栈内存没有对象名称指向该内存时,就会自动垃圾回收器回收 !


方法区

存放的是

  • 类信息,就是class文件。

  • 静态的变量

  • 常量

  • 成员方法

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

猜你喜欢

转载自blog.csdn.net/m0_58702068/article/details/120502575
今日推荐