Java源码JVM深度学习必备

本文详细介绍了Java虚拟机的内存布局,包括程序计数器、Java虚拟机栈、本地方法栈、Java堆和方法区等。探讨了垃圾回收算法(如标记-清除、复制、标记-整理和分代收集)和垃圾回收器(如Serial、ParNew、Parallel Scavenge、CMS和G1)。还讨论了垃圾回收时程序逻辑是否可以继续执行、内存分配策略、空间分配担保和Java中的引用类型。此外,文章还涵盖了Minor GC和Full GC的区别,对象创建过程,类加载机制,双亲委派模型,分派原理,对象的内存布局,虚拟机栈的各个部分,Java内存模型的happen before原则,方法区的存储内容以及如何处理内存溢出问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、jvm内存布局

1.程序计数器:当前线程正在执行的字节码的行号指示器,线程私有,唯一一个没有规定任何内存溢出错误的情况的区域。
2.Java虚拟机栈:线程私有,描述Java方法执行的内存模型,每个方法运行时都会创建一个栈帧,存放局部变量表、操作数栈、动态链接、方法出口等信息,每个方法的运行到结束对应一个栈帧的入栈和出栈。会有StackOverFlowError异常(申请的栈深度大于虚拟机所允许深度)和OutOfMemoryError异常(线程无法申请到足够内存)。
3.本地方法栈:功能与Java虚拟机栈相同,不过是为Native方法服务。
4.java堆:线程共享,存放实例对象和数组对象,申请空间不足抛出OutOfMemoryError异常。
5.方法区:线程共享,存储已被虚拟机加载的类的类信息、常量、静态变量、编译后的代码;运行时常量池存放class文件中描述的符号引用和直接引用,具有动态性。方法空间不足时抛出OutOfMemoryError异常。
6.直接内存:JVM规范之外的,NIO类引入了一种基于通道和缓冲区的I/O方式,可使用Native函数库直接分配内存,通过一个存储在Java堆中的DirectByteBuffer对象作为这块内存的引用进行操作,避免了在Java堆和Native堆中来回复制数据。

2、垃圾回收算法与垃圾回收器

垃圾收集算法:
1.标记-清除算法:将所有需要回收的对象先进行标记,标记结束后对标记的对象进行回收,效率低,会造成大量碎片。
2.复制算法:将内存分为两块大小相等的空间,每次只用其中一块,若一块内存用完了,就将这块内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

数据大观察

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

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

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

打赏作者

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

抵扣说明:

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

余额充值