2024年Go最全JVM基础知识(一)jvm内存结构_10,2024年最新都是精髓

img
img
img

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

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

如果你需要这些资料,可以戳这里获取

class文件中存在非运行时常量池(编译阶段即已确定), JVM规范对class文件结构有严格规范, 必须符合此规范的class文件才会被JVM认可和装载
class常量池并非运行时常量池的唯一数据输入口, 在运行时可以通过代码生成常量并将其放入运行时常量池中

  1. 在方法区进行内存回收的主要目的是对常量池的回收和对内存数据的卸载, 其内存回收效率远低于堆
虚拟机栈(为JVM执行的方法服务)
  1. 每个方法的生命周期, 对应一个栈帧在虚拟机栈中从入栈到出栈的过程(线程私有)
  2. "栈帧"用于存储局部变量表(包括参数)、操作栈、方法出口等信息
  3. 局部变量表用于存放8种基本数据类型和对象引用, 其所需的内存空间在编译期即完成分配
本地方法栈(为Native方法服务, 与虚拟机栈类似)
  1. 存放对象实例和数组, 被各个线程所共享
  2. 通过-Xms(最小值)和-Xmx(最大值)参数设置内存大小
  3. 堆被划分为新生代和老年代. 新生代存储新创建的对象和尚未进入老年代的对象, 老年代存储经过多次新生代GC任然存活的对象
程序计数器

当前线程所执行的字节码的行号指示器

三. 直接内存

直接内存既不是虚拟机内存的一部分, 也不是java虚拟机规范定义的内存区域 (如jdk1.4新加入的NIO)

四. 堆栈

栈:

栈内存用来存储局部变量和方法调用; 是线程私有的; 内存不足抛java.lang.StackOverFlowError

  1. 栈是由栈帧组成, 每当线程调用一个java方法时,JVM就会在该线程对应的栈中压入一个帧; 帧中存储了对应方法的局部数据, 方法执行完, 则对应的帧从栈中弹出, 并把返回结果存储在调用方法的帧的操作数栈中
  2. 栈帧组成: 局部变量区、操作数栈、帧数据区
  3. 局部变量区: 被组织成以一个字长为单位、从0开始计数的数组, short、byte和char的值在存入数组前要被转换成int值, long和double在数组中占据连续的两个字长, 通过索引来访问
  4. 操作数栈: 被组织成以一个字长为单位的数组, 通过入栈和出栈来访问(临时数据存储区域)
  5. 帧数据区: 用于支持常量池解析、正常方法返回、异常派发机制
堆:

堆内存用来存储java对象; 是所有线程共有的; 内存不足抛java.lang.OutOfMemoryError

五. 堆内内存和堆外内存

堆内内存

采用垃圾回收器GC统一进行内存管理, GC会在某些特定的时间点对所有分配的堆内内存进行扫描并回收, 这个过程会对java应用程序的性能造成一定影响, 还可能会产生Stop The World

img
img

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

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

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

s/618658159)**

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值