学习笔记07 - java内存模型

内存简介:

在这里插入图片描述

JVM架构图

在这里插入图片描述

Runtime Data Area
Stack:堆栈
Heap:堆
Method Area:方法区
PC Register:程序计数器
Native Method Stack:本地方法栈
JDK8 - JVM 内存模型:
线程私有:
程序计数器(字节码指令 no OOM)
虚拟机栈(java方法 SOF& OOM)
本地方法栈(native方法 SOF & OOM)
线程共享:
MetaSpace(元空间)(类加载信息 OOM)
堆(数组和对象 OOM) { 常量池(字面量和符号引用面量)
程序计数器(program counter Register)

1)当线程所执行的字节码行号指示器(逻辑)
2)改变计数器的值来选取下一条需要执行的字节码指令
3)和线程是一对一的关系即“线程私有”
4)对java方法记数,如果是native方法则计数器值为undefined
5)不会发生内存泄漏

java虚拟机栈()stack

     java方法执行的内存模型
     包含多个栈帧
在这里插入图片描述
局部变量:包含方法执行过程中的所有变量
操作数栈:入栈,出栈,复制,交换,产生消费变量

递归为什么会引发 java.lang.stackOverflowError异常
递归过深,栈帧数超出虚拟机栈深度
本地方法栈

     与虚拟机栈相似,主要作用于标注了native的方法

元空间(MetaSpace)与永久代(PermGen)的区别

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

MetaSpace相比PermGen的优势
字符串常量池存在永久代中,容易出现性能问题和内存溢出
方法信息大小难以确定,给永久代的大小指定带来困难
永久代会为GC带来不必要的复杂性
方便HotSpot(虚拟机)与其他JVM入Jrockit的集成
Java堆(GC堆):存储对象实例,GC管理的主要区域

     对象实例的分配区域
     GC管理的主要区域

在这里插入图片描述

Java7 原先位于方法区里的字符串常量池,已被移动到Java堆中
JDK8 使用元空间替代了永久代

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值