记录:JVM内存模型

算是半个《深入理解java虚拟机第二版》的读书笔记。
周志明大佬的作品,讲的比较深,看的其实也有一点云里雾里。
自己在纸上大概写了写,再归拢一下放在博客上吧。
不保证完全正确。。

这篇文章为第二章的部分理论内容。

内存模型,我个人按照线程私有及线程公有两种类型来进行分类。

线程私有部分

1、程序计数器:线程切换时记录上下文信息,执行java方法时会记录当前指令的地址,线程重新获得cpu时会从这里取出当前指令地址继续执行。
2、虚拟机栈:描述java方法执行的内存模型,包括局部变量表,操作数栈,动态链接,方法出口等。
局部变量表包括基本数据类型(int啊,String啊这些的),对象引用,returnAddress等。编译时确定分配的内存空间大小,运行时不改变。
3、本地方法栈:和虚拟机栈类似,不过本地方法栈特指native方法,不过有的虚拟机对这两种栈不做区分,两种栈合二为一。比如最常见的HotSpot虚拟机就是这样的。
线程私有部分随着线程的创建而创建,随着现成的死亡而死亡。
每一次方法调用都会有一个对应栈帧压入java栈,每一个方法调用结束(return或抛出异常),都会有一个栈帧被弹出。

线程公用部分:

1、java堆:虚拟机启动时创建,存放对象实例,GC主要针对区域。
2、方法区:存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。
运行时常量池:方法区的一部分,存放编译期中预置在class文件中的常量池及运行期间生成的新常量。

在这里插入图片描述

其他

直接内存:堆外内存,比如IO中的缓冲区有用到这种内存。

针对这部分,虚拟机可能会抛出StackOverflowError(方法栈帧超过设定大小)及OutOfMemoryError(内存没有足够连续空间分配了)这两种错误。

这么一总结,好像也没多少东西。。。先这样吧,第二章还有一小部分,下一篇再写。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值