Java基础第二节

JVM概述

程序计数器

占用内存较小,是当前线程所执行的字节码(JVM指令)行号指示器,JVM通过改变计数器的值来选取下一条要执行的指令。

多线程之间的程序计数器相互独立,互不影响,为了保证每个线程恢复之后都能回到之前中断的位置,进而继续执行。

Java堆

一般所说的“堆”就是指Java堆,是用来存放java对象的,每个Java对象都是存放在堆中的。

面向对象编程语言和面向过程编程语言的区别?

面向过程关注的是每一步具体的细节,将程序细化到具体的步骤

面向对象关注的是程序能够抽象出多少个数据模型,不需要关注的具体步骤

Java堆被所有线程共享,Java内存结构中的大头,占用了大部分空间,是GC(垃圾收集器)的主要管理区域。

Java堆又分为年轻代,老年代,永久代。三者都是存放java对象的

在这里插入图片描述

年轻代

又分为Eden区和Survivor区

Eden:伊甸园

Survivor:幸存者(Survivor From、Survivor To)

Eden:对象刚创建的时候,存放在Eden区

Survivor:GC回收的时候,将Eden不需要回收(存活)的对象存入Survivor From区,在下一次回收的时候,将From区中不需要回收的对象存入To区,然后清理From区,在下下一次回收的时候,接着将To区中不需要回收的对象存入From区,再清理To区,依次循环。。。

每次回收之后,存活下来的对象年龄都会 +1,年龄增加到一定程度,移动到老年代中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cgrflsm4-1620970326225)(C:\Users\Mie\AppData\Roaming\Typora\typora-user-images\image-20210514133135295.png)]

老年代

存放生命周期较长的对象

永久代

JDK1.7之前将类的信息存放在永久代中,JDK1.8之后去掉了永久代改为元空间

元空间和永久代是方法区的具体实现,方法区只是一种规范。

1.7 之前字符串常量池存放于永久代中,1.8 去掉了永久代,1.8 之后的字符串常量池放在堆中,为什么要这样处理?

因为永久代空间有限,创建字符串对象,需要调用 inter 方法。

元空间使用的是本地内存,而永久代使用的是JVM内存

本地内存有多大,元空间就有多大,不再受限于 JVM 内存的大小,相当于开辟出更多的区域可以使用,效率更高。

虚拟机栈

通常所说的栈就是虚拟机栈,Java方法的执行是在虚拟机栈中完成的,栈中存放的是栈帧,每个栈帧对应一个被调用的方法,方法的执行其实就是出栈和入栈的过程。

栈帧包括:

1、局部变量表(Java 方法中用到的变量)

2、操作数栈(数据入栈出栈,包含运算符栈)

3、动态链接(方法的返回地址,方法的出口)

每一个方法的执行,JVM 都会创建一个栈帧,并且将栈帧压入 Java 栈中,方法执行完毕,该栈帧出栈。

IDE 集成开发平台

NetBean、Eclipse(MyEclipse)、IDEA(主流的开发软件)

IDEA 插件 提升开发效率

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

spider-clown

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值