进程、JVM、栈、递归

1、程序:一队代码的集合,是个可执行文件,但是时一个静态概念,一般保存在硬盘中

2、进程:正在执行的可执行文件,是个动态概念,会按照程序的设计,在内存中一步步执行

运行起来的程序,指的是载入到内存中的可执行文件,这个时候操作系统就会开启一个进程来运行这个内存中的文件对象。

3、java的内存划分和管理

Java Runtime Data Area:java运行时数据区域,我们一般叫JVM内存。

分为:私有内存区(VM栈、程序计数器、本地方法栈)和共享内存区(方法区、堆内存)

程序计数器是一块比较小的内存,可以看做字节码文件的指示器,分支,循环,跳转等,都需要程序计数器来完成。

静态区/方法区是存放我们的程序文件的,载入内存后的class文件,在静态区存储,包括方法,静态属性都是在静态区的,还有运行时 的常量池。

VM栈:虚拟机栈,一般都叫栈内存(是以数据结构为模型,开辟的一块地址空间),栈是一种数据结构,先进后出,比如弹夹

附:GC垃圾回收借鉴地址:GC垃圾回收 - 简书

4、栈的构成因素:栈空间(以数据结构为模板开辟的空间)、栈帧(栈空间中的每一个元素)、栈顶元素(最后一个放进去的栈帧,在最上面)、栈底元素(第一个放进去的栈帧,在最下面)、方法是在栈内存中执行的

5、栈的操作:压栈(把栈帧放到栈空间的过程)、弹栈(把栈帧从栈空间中弹出的过程)

6、本地栈:比如hashCode()方法,前面一个native声明,本地,当我们执行这些方法的时候,就会在本地栈执行。对于我们来说就是简单地调用方法,但是对于JVM来说,需要单独的空间来存存储的服务,结构和VM栈一样。

7、堆内存:用来保存对象的,先不管,每个对象空间,分为3大类,即数据部分(成员变量xxx)、头部(hashCode值)、类型(指向静态区中,常见该对象的这个class文件对象)。

8、java程序流程执行流程:编码(利用开发软件,编辑器进行编码,生成xx.java文件),编译(通过javac命令,把xx.java文件,编译成xx.class文件),运行(通过java命令,运行xx.class文件  8.1  8.2  8.3)

8.1、开启java虚拟机,然后xx.class文件被载入到内存中的静态区

8.2、jvm自动调用该程序的main方法

8.3、main方法被调用,会在栈内存中开辟main方法的栈帧,然后把main方法代码复制进去执行。

如果main中,没有其他方法调用,则顺序执行玩后,弹栈退出,jvm关机。

如果main方法,有其他方法调用,就在栈内存中再开辟一个栈帧,把该方法的代码复制进去执行。

如果被调用方法中,还有其他方法的调用,以此类推,执行完成后返回调用处,继续执行

一直到main方法都执行结束,弹栈,则jvm关机

9、程序的加载,分为静态加载(运行程序的时候会一次性吧左右相关的程序都载入)和动态加载(运行过程中,用到谁,就去加载谁),java中采用动态加载

10、方法的执行:方法在调用的时候,才会在栈内存找那个开辟栈帧。如果方法不调用,则不会在内存空间中划分空间,只保留在静态区。方法调用就等于压栈操作,方法执行完成就等于弹栈操作。

11、递归就是在方法中调用当前方法。递归也需要起始值、终止条件、步长、如果没有 ,就是死循环,导致栈内存溢出,常见异常

12、递归的应用场景:一般树状结构都可以使用递归   比如查询地区,树状的菜单系统

递归比普通的算法更消耗内存,巡行效率低,谨慎使用,能用循环搞定的,就不使用递归

13、递归常见问题:需要获取文件目录下的所有的子文件,斐波那契数列这种规律的,累加加和,汉诺塔等

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值