10面向对象基础

一、局部变量与全局变量

  1. 概述
    成员(全局)变量:定义在类中的变量
    局部变量:定义在方法的变量
  2. 区别
    (1)、应用范围:成员变量在整个类中都有效;而局部变量只在其声明的方法内有效。
    (2)、生命周期:成员变量属于对象,随着对象的创建而创建,随着对象的消失而消失;而局部变量使用完马上释放空间。
    (3)、存储位置:成员变量隶属于对象,它存在在堆内。当没有指引指向它时,才会被当做垃圾清理;而局部变量存在在桟内存中,当不再使用时,马上就会被释放。
    (4)、初始值:成员变量存储在堆中,如果没有赋初值,会有默认值;而局部变量要想使用必须先初始化赋值。

二、内存分析

下图是运行时各数据内存存放图
运行时各数据内存存放图

  1. 程序计数器:是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器
  2. Java虚拟机栈:我们通常所说的栈,方法的调用执行在栈中,当方法被调用的时候方法进栈,当方法执行完毕时方法出战
  3. 本地方法栈:为虚拟机使用到的本地(Native)方法服务
  4. 堆:是虚拟机所管理的内存中最大的一块。主要存放对象实例,所有的对象实例以及数组都应当在堆上分配
  5. 方法区:主要存放存储类的结构,比如运行时常量池、字段和方法数据,以及方法和构造函数的代码,包括类和实例初始化以及接口初始化中使用的特殊方法。方法的调用时并不是在方法区进行的,而是对应着方法的进栈和出栈

三、垃圾回收算法

  1. 基本概念

内存分配:由JVM自动为对象分配相应的内存空间
内存释放:由JVM提供垃圾回收机制自动的释放内存空间
垃圾对象:是不再被任何引用指向的对象
垃圾回收机制(GC:Garbage Collection):将垃圾对象所占用的堆内存进行回收 。我们可以调用System.gc()或Runtime().gc()通知垃圾回收器收集垃圾,执行代码后并不意味着会立即启动垃圾回收机制开始回收,但能加快垃圾回收机制的运行

  1. 垃圾的判断

引用计数法:给对象添加一个计数器,每当一个地方需要引用该对象,就给计数器加1,当引用失效则计数器减1。如果计数器为0了,就代表该对象已经成为垃圾
可达性分析算法
可达性分析

  1. 垃圾收回常见算法

标记清除算法:分为“标记”和“清除”两个阶段
标记整理算法:与标记清除算法多了一个整理的阶段
标记赋值算法:将可以内存按容量划分为大小相等的两块,每次只使用一块。当这一块的内存用完了,就将还存活着的对象赋值到另一块上面,然后再把已使用过的垃圾内存空间一次清理掉

三、匿名对象

没有名字的对象。适用与某对象只使用一次

四、null

null表示引用未指向实际的对象,例如

Test t = null;
System.out.println(t.getName) //会报空指针的异常

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值