6分钟死磕JVM的5大分区及具体作用_jvm内存分哪几个区,每个区的作用是什么

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!


img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

堆区里面又区分有新生代、老年代。

新生代里又包含1个Eden区和2个survivor区【From survivor, To survivor】,

堆里的细分是为了更好的分配和回收内存。

方法区 [所有线程共享]

主要用于存储加载的类型信息、常量、静态变量和即时编译器编译后的代码缓存等数据。

在JDK8中已经把里面的永久代给废弃了,改用本地内存的元空间,这样就能加载更多的类型信息。

运行时常量池

用于存放编译期生成的各种字面量与符号引用。

虚拟机栈 [线程私有]

这个也就是我们经常说到的栈区。在每个方法执行的时候都会同步创建一个栈帧,每个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。

每一个方法的执行就相当于是压栈和出栈,在每一个方法执行完毕后其对应栈内的数据也就随之被回收了。

所以也就是有些变量我们能够定义为局部变量的尽量定义在局部变量,方便及时回收。

局部变量表

存放了编译期可知的数据类型、对象引用和返回地址类型。

  • 基本数据类型【boolean、byte、char、short 、int、float、long、double】
  • 对象引用:reference类型,不等同于对象本身,可能是一个指向对象起始地址的引用指针,也可能是指向一个代表对象的句柄或者其他于此对象相关的位置。
  • returnAddress类型:指向了一条字节码指令的地址。

上述数据类型在局部变量表中的存储控件以局部变量槽(Slot)来表示,其中64位的long和double类型数据会占用2个变量槽,其余的数据类型只占用一个。

本地方法栈 [线程私有]

本地方法栈和虚拟机栈其实都一样,唯一区别就是这个是提供给本地方法调用使用的, 并且程序计数器在执行本地方法时的指令值是undefined。

程序计数器 [线程私有]

是一块较小的内存空间,可以看做是当前线程执行的字节码行号指示器。[有的地方也叫PC寄存器]

一些基础功能: 分支、 循环、跳转、异常处理和线程恢复等都依靠它来处理。

每个线程都对应着自己唯一的程序计数器。

计数器记录的是正在执行的虚拟机字节码指令的地址,通过改变计数器的值来选择下一步要执行的指令。

这是唯一一个在JVM规范里不会有OOM的区域。

文末

我总结了一些Android核心知识点,以及一些最新的大厂面试题、知识脑图和视频资料解析。

需要的小伙伴直接点击文末小卡片可以领取哦!我免费分享给你,以后的路也希望我们能一起走下去。(谢谢大家一直以来的支持,需要的自己领取)

Android学习PDF+架构视频+面试文档+源码笔记

部分资料一览:

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

54613a03fab5e56a57acb)**

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值