面向对象(5)

本文探讨了Java中基本数据类型与包装类型的差异,包括对象性质、存储位置、初始化及使用场景。接着,阐述了Java栈和堆的特点,强调栈的快速存取以及堆的动态内存分配。此外,详细介绍了堆内存的结构,包括新生代、老年代和永久代,以及对象的生命周期和垃圾回收机制。
摘要由CSDN通过智能技术生成

      一. 基本数据类型和包装类型的区别

1、包装类是对象,拥有方法和字段,对象的调用都是通过引用对象的地址,基本类型不是

2、包装类型是引用的传递,基本类型是值的传递

3、声明方式不同,基本数据类型不需要new关键字,而包装类型需要new在堆内存中进行new来分配内存空间

4、存储位置不同,基本数据类型直接将值保存在值栈中,而包装类型是把对象放在堆中,然后通过对象的引用来调用他们

5、初始值不同,eg: int的初始值为 0 、 boolean的初始值为false 而包装类型的初始值为null

6、使用方式不同,基本数据类型直接赋值使用就好 ,而包装类型是在集合如 coolection Map时会使用

       二. 栈(stack)

Java栈的区域很小 , 大概2m左右 , 特点是存取的速度特别快

栈存储的特点是:先进后出

存储速度快的原因:

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

指针向下移动, 会创建新的内存, 向上移动, 会释放这些内存 !

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

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

堆存储的是:

基本数据类型的数据以及引用数据类型的引用!

       三.堆(heap)

存放的是类的对象 ;

Java是一个纯面向对象语言, 限制了对象的创建方式 :

所有类的对象都是通过new关键字创建

new关键字, 是指告诉JVM , 需要明确的去创建一个新的对象 , 去开辟一块新的堆内存空间:

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

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

垃圾回收器回收堆内存的规则 :

当栈内存中不存在此对象的引用时,则视其为垃圾 , 等待垃圾回收器回收 !

堆在逻辑上分为三部分:

新生代(Young Generation,常称为YoungGen)

老年代(Old Generation,常称为OldGen、TenuringGen)

永久代(Permanent Generation,常称为PermGen)

新生区(New/Young Generation):

新生代(Young Generation),常称为YoungGen,位于堆空间。

新生区又分为Eden区和Survior(幸存区)。

        四. Eden:新创建的对象

Survior 0、1:经过垃圾回收,但是垃圾回收次数小于15次的对象。

养老区(Old Generation):

老年代常称为OldGen,位于堆空间

Old:垃圾回收次数超过15次,依然存活的对象。

永久区(Permanent Generation):

永久代常称为PermGen,位于非堆空间。

永久区是一个常驻内存区域,用于存放JDK自身所携带的Class,Interface的元数据,也就是说它存储的是运行环境必须的类信息,被装载进此区域的数据是不会被垃圾回收器回收掉的,关闭JVM才会释放此区域所占用的空间。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值