Day04

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

内存划分

1. 程序和进程

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

运行起来的程序,就是指载入到内存中的可执行文件,这个时候操作系统会开启一个进程来运行内存中的这个文件对象,如果要关闭某个程序,就可以直接杀死这个进程

2. JVM内存划分
Xxx.class 是个静态概念,保存在硬盘中,当我们执行java 运行命令的时候,会把该class文件载入内存中
Java Runtime Data Area : java运行时数据区域,我们一般叫JVM内存

内存被划分为5个区域 : 程序计数器,方法区/静态区/静态代码段 , 栈内存(虚拟机栈) , 本地方法栈 , 堆内存

程序计数器 : 是一块较小的内存区域,作用可以看做是当前执行的行号,比如 if , 循环, 跳转,异常处理等 都需要依赖程序计数器来完成

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

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

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

3.Java执行过程

1 java程序编写
文本编辑器
2 java程序编译
Javac 命令
3 Java程序的执行
Java 命令
3.1 开启java虚拟机,载入对应的class文件,载入到静态区
3.2 jvm自动调用main方法
3.3 main被调用,JVM会在栈内存开辟一个main的空间,用于执行main中的代码
如果main中没有其他方法调用,执行完就弹栈,结束,JVM关闭
如果main方法中有其他方法调用,就会在栈内存再次开辟栈帧,把对应的方法放入栈内存,开始执行
如果被调用方法中还有其他方法调用,同上
一直到某一个方法栈中,没有其他方法调用,该方法如果代码执行完成,则该栈帧弹栈,如果需要返回数据,会占用临时空间把数据传递回去
弹栈后 返回上一个栈帧中方法调用处,继续执行
一直到main方法弹栈,则整个栈帧调用链结束.JVM关闭

栈内存是真正执行程序的地方,其他内存都是存储数据
方法调用 就等于是 压栈操作
方法执行结束 就等于是 弹栈操作

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

在这里插入图片描述

递归

1.概述

方法体中对当前方法的调用
就是以此类推,和循环基本思想一致

2.应用场景

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

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

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

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

难点 : 不容易理解,画栈帧图即可
3.累加案例
在这里插入图片描述
4. 菲波那契数列

4.1 递归实现

在这里插入图片描述

4.2 循环实现

在这里插入图片描述
4.3 常见异常

死循环
在这里插入图片描述

数组

1.概述

基于底层的数据结构,任何语言都有
用于存储多个数据

java中的数组
像是多个储存相同数据类型的容器
有序,可重复
线性,空间连续
内置对象保存在堆内存,占用两块空间

Arrays类
java提供操作数据的工具类

引用类型
数据,类,接口
数据保存的是地址

length
数组对象中有一个默认length属性保存当前数组长度
长度确定不能更改
数组不能删除数据,想删除要重新组建数组空间

索引
数组采用第一个元素地址,作为整个数组地址,通过偏移量可以找到对应元素
通过内存地址直接查询,效率高
每一个元素空间,编号独一无二
第一个元素个数表示一定是0,以此类推,最后一个元素是总个数-1

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

2. 数据结构

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

3.数组声明

静态声明
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

动态声明

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.数组操作

访问/获取

在这里插入图片描述

设置/更改

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值