【实战JVM】-基础篇-03-Java内存结构


1 运行时数据区

运行时数据区负责管理jvm使用到的内存,比如创建对象和销毁对象。

1.1 总览

在这里插入图片描述

在这里插入图片描述

1.2 程序计数器

在这里插入图片描述

在这里插入图片描述

1.2.1 是否会内存溢出

在这里插入图片描述

简单来说,PC计数器就两个作用:

  • 对于单线程环境,保存下一条需要执行的指令的内存地址。
  • 对于进程来说,用于保存上下文信息,方便切换。

1.3 java虚拟机栈

在这里插入图片描述

1.3.1 栈帧的组成

在这里插入图片描述

1.3.1.1 局部变量表

在这里插入图片描述

在这里插入图片描述

  • 起始PC:表示根据字节码哪一行可以使用该局部变量
    • i就是在0、1之后完成初始化,234可以使用,所以长度是3,j就是1

在这里插入图片描述

在这里插入图片描述

静态方法的局部变量表不包括自己this,而实例方法中的局部变量表存放着this,局部变量也会占用槽

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.3.1.2 操作数栈

在这里插入图片描述

1.3.1.3 帧数据
1.3.1.3.1 动态链接

在这里插入图片描述

1.3.1.3.2 方法出口

在这里插入图片描述

1.3.1.3.3 异常表

在这里插入图片描述

1.3.2 是否会内存溢出

在这里插入图片描述

在这里插入图片描述

1.3.3 设置虚拟机栈大小

在这里插入图片描述

1.3.3.1 注意事项

在这里插入图片描述

1.4 本地方法栈

在这里插入图片描述

1.5 堆

在这里插入图片描述

成员变量存放于中,局部变量存放于中(由局部变量表维护)。

jdk8之前,静态变量存放在方法区中,jdk8之后,静态变量存放在中。

堆是线程共享的,所以针对需要多线程使用的环境,可以将变量变为静态变量以达到我们的需求。

1.5.1 是否会内存溢出

在这里插入图片描述

1.5.2 Java堆

在这里插入图片描述

1.5.2.1 Arthas查看堆内存
dashboard -i 刷新频率(毫秒)

查看堆内存used、total、max

在这里插入图片描述

1.5.2.2 默认参数

如果不设置默认参数,默认max是系统内存的1/4,total默认是系统内存的1/64。

在这里插入图片描述

建议将-Xmx和-Xms设置为相同的值,这样在程序启动之后可使用的总内存就是最大内存,而无需向java虚拟机再次申请,减少了申请并分配内存时间上的开销们也不会出现内存过剩之后,堆收缩的情况。

在这里插入图片描述

1.6 方法区

在这里插入图片描述

1.6.1 元信息

在这里插入图片描述

1.6.2 运行时常量池

解析阶段将常量池中的符号引用替换为直接引用

在这里插入图片描述

1.6.3 字符串常量池

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.6.4 神奇的intern

在这里插入图片描述

jdk6

在这里插入图片描述

jdk7之后

在这里插入图片描述

主要是因为jdk7之后,字符串常量池是在堆中的,而方法区是在永久代里的;jdk8字符串常量池是在堆中的,而方法区是在元空间里的。

1.6.5 方法区实现

在这里插入图片描述

在这里插入图片描述

1.6.6 是否会内存溢出

在这里插入图片描述

没有过高要求设置256M即可,但是元空间一定要设置。

1.6.7 静态变量的存储

在这里插入图片描述

1.7 直接内存

方法区是放在元空间中,属于操作系统中的直接内存。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AAA码农宝哥.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值