Java内存模型

JVM(Java Virtual Machine)内存体系结构

     程序的开发离不开内存的支持,要想理解整个java的内存体系,必须清楚java程序的执行过程

(1)如图,按功能编写一个*.java源程序,然后利用java提供的编译器(java.exe) 将*.java编译为JVM可以使用的*.class字节码文件

(2)当进行java程序类解析时(java.exe启动JVM进程) ,JVM会通过类加载器加载各个类的字节码文件,然后将操作继续交由JVM执行引擎处理

(3)如果在程序中需要调用本地的C程序函数库,则可以通过本地方法接口实现与函数库进行连接

(4)程序执行过程中,JVM会使用一段空间存储程序执行期间所要用到的数据和相关信息,这段空间称为运行时数据区,即JVM内存

通过上述分析,内存管理实际上是对运行时数据区(Runtime Data Area)这段空间的管理  

其中,运行时数据区(Runtime Data Area)的组成部分:

程序计数器(Program Counter Register):在编译时会为每一个字节码文件的程序分配一个程序位置,用于标注下一个要执行的指令位置。简而言之,为一个行号的指示器。每一个线程都有一个自己独立的程序计数器,属于私有区域(内存空间极小)

Java栈(Stack):又称Java虚拟机栈,每个线程都会存在私有的栈内存空间。在线程对象每次调用一个方法时都会自动产生一个栈帧

Java对象访问方式

java中引用操作是最为重要的数据处理模式,而在引用访问的过程中涉及3块内存区域:栈内存堆内存方法区

假如这是一段引用类型代码: Object ob = new Object();

(1)Object ob: 一个本地引用,会存储在JVM的本地变量表中,表示一个引用(reference)类型数据

(2)new Object() :一个实例化对象,该数据将保存在堆内存中

(3)堆内存中会记录Object类的相关类信息(如成员、方法、接口)的地址,而这些地址所执行的数据会存储在方法区中

在java的虚拟机规范中,对于通用引用类型(reference)去引用访问具体对象的方法并未做规定,目前主流的方法有两种:

JVM垃圾收集

JDK1.8之前提供用永久代,之后永久代被替换为元空间(MetaSpace)

年轻代

老年代

永久代

JDK1.8之前提供用永久代,之后永久代被替换为元空间(MetaSpace)

元空间(MetaSpace)

垃圾收集策略

垃圾收集主要分为 年轻代GC老年代GC 两个部分。

年轻代GC:主要采用复制清理算法

老年代GC:  主要采用标记整理算法

引用类型

从JDK1.2开始,Java把对象引用分为4种级别:强引用、软引用、弱引用、虚应用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

灯雾️

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

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

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

打赏作者

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

抵扣说明:

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

余额充值