Java虚拟机内存管理

举报
孙小北 发表于 2022/04/25 23:27:45 2022/04/25
【摘要】 Java虚拟机内存管理深入理解Java虚拟机:JVM高级特性与最佳实践(第二版) 运行时数据区域运行时数据区域:方法区、虚拟机栈、本地方法栈、堆、程序计数器程序计数器:最简单的,是一块小的内存,存储当前线程所执行的行号计数器,选取下一条要执行的命令虚拟机栈:Java方法执行的暂存,每一个方法所执行的过程就是其再虚拟机栈进栈和出栈的过程虚拟机栈代码本地方法栈:功能与虚拟机栈类似,区别在于虚拟...

Java虚拟机内存管理

  • 深入理解Java虚拟机:JVM高级特性与最佳实践(第二版)

运行时数据区域

  • 运行时数据区域:方法区、虚拟机栈、本地方法栈、堆、程序计数器
  • 程序计数器:最简单的,是一块小的内存,存储当前线程所执行的行号计数器,选取下一条要执行的命令

image-20220425225951397.png

  • 虚拟机栈:Java方法执行的暂存,每一个方法所执行的过程就是其再虚拟机栈进栈和出栈的过程
    image-20220425230014781.png

  • 虚拟机栈代码
    image-20220425230029979.png

  • 本地方法栈:功能与虚拟机栈类似,区别在于虚拟机栈执行Java代码,而本地方法栈执行本地代码,如C++、C等代码

  • 方法区,与堆一样,是各个进程共享的,方法区是线程安全的。所有进程共享,进行安全机制。

  • 堆:最大的部分,对象存储,方便清楚,连续的内存空间,速度快

Java堆空间划分:新生代(Eden空间、From Survivor空间、To Survivor空间 )、老年代。

  • 8:1:1,将尽可能多的对象放老年代
    image-20220425230053286.png

举例
image-20220425230106381.png

总结

  • 认识运行时内存数据的划分
  • 各内存区域存放的数据
  • 堆内存的比例

虚拟机对象探秘

  • Java对象内存布局64字节:对象头(Mark Word 8字节+KClass Pointer 8字节)、实例数据(实际大小)、对象填充(不足填充)
    image-20220425230147885.png

  • 对象访问定位
    image-20220425230202615.png

总结

  • 对象的创建
  • 对象的内存结构
  • 对象的访问定位

实战

  • Java堆溢出
    image-20220425230258949.png

  • 栈溢出
    image-20220425230307587.png

  • 直接内存溢出
    image-20220425230317446.png

总结:

  • 运行时数据的结构和分布
  • 对象在内存内的布局和访问定位
  • 几个实例学习
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。