Day04 内存划分、递归、数组初识

内存划分

程序和进程

程序:可执行文件(指令集合),静态概念,一般保存在硬盘中
进程:正在执行的文件,动态概念

JVM内存划分

内存被划分为5个区域 : 程序计数器,方法区/静态区/静态代码段 , 栈内存(虚拟机栈) , 本地方法栈 , 堆内存
程序计数器 : 是一块较小的内存区域,作用可以看做是当前执行的行号,比如 if , 循环, 跳转,异常处理等 都需要依赖程序计数器来完成

静态区/方法区/静态代码段 : 是用来存放我们载入内存中的class文件,包括我们的方法,还有代码段都会保存在静态区
内部还有一个运行常量池
虚拟机栈 : 又叫栈内存
方法是在栈内存中执行的,包括局部变量也是在栈内存
栈内存 : 是一个以栈数据结构为模型,创建的一段空间
栈 : 是一种数据结构,先进后出,类似于子弹夹
栈空间 : 就是指以栈数据结构为模型开辟的空间
栈帧 : 就是栈内存中每一个栈元素
栈顶元素 : 指最后一个保存进去的元素
栈底元素 : 指最先保存进去的元素

栈操作
压栈 : 把元素添加到栈空间的过程
弹栈 : 在栈空间中把数据删除的过程
本地栈 : 和VM栈结构一致,只不过是用来执行本地方法,比如 hashCode(),我们自己写的方法都在VM栈执行

堆内存 : 用来保存对象
根据静态区的class文件,创建的用于存储成员属性的空间
每个对象空间
1 头部部分 : hashCode值
2 数据部分 : 成员变量
3 类型 : 是由哪个类创建的对象,静态区的地址

动态加载和静态加载
动态加载 : 只载入当前程序和需要的文件,如果执行过程中需要别的文件,再去硬盘中找
静态加载 : 开始执行,把所有和当前程序相关的文件,全部一次性载入

递归

概述:方法体中对当前方法进行调用
需要起始条件,终止条件,步长

应用场景

1 获取根目录下所有直接子文件
2 判断每一个子文件是否是文件夹
3 不是, 直接操作(说明是文件)
4 如果是文件夹,就把该文件夹作为跟目录再去获取所有子目录,再进行判断
5 一直是重复操作,直到把所有的文件夹都遍历完

1层目录,使用1个循环
2层目录,使用2个嵌套循环
3层目录,使用3个嵌套循环

如果不确定目录结构呢? 循环就搞不定了

常见问题
文件夹复制
斐波那契数列
阶乘
累加加和
汉诺塔

在这里插入图片描述

异常

内存溢出 StackOverflowError

数组

概述:多个相同数据类型的存储容器
有序,可重复
线性,空间连续
内置对象,保存在堆内存,占用堆栈两块空间
Arrays类
java.utils.Arrays数组类
引用类型:保存地址
length默认属性,保存当前数组擦很难过度
数组长度确定不能更改
索引
第一个元素的地址为整个数组的地址,通过偏移量找到其他元素
每一个元素空间都有独一无二的编号

特征

查询更改快,添加删除慢,下标从1开始

数据结构

是计算机存储、组织数据的一种方式
通常选择合适的数据结构 可以带来更高的执行/存储效率

静态声明
数据类型[]变量={值,值,值…}多个值用逗号隔开
动态声明
数据类型变量名= new数据类型[长度];

数组操作

在这里插入图片描述
设置、更改
arr[下标] = 值
常见异常
数组下标越界
空指针异常
for循环遍历

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值