【jvm】垃圾回收是否会涉及到虚拟机栈?

目录

          • [1. 说明](#1. 说明)
          • [2. 虚拟机栈的特点](#2. 虚拟机栈的特点)
          • [3. 虚拟机栈的作用](#3. 虚拟机栈的作用)
          • [4. 垃圾回收与虚拟机栈的关系](#4. 垃圾回收与虚拟机栈的关系)
          • [5. 垃圾回收的主要算法](#5. 垃圾回收的主要算法)
            • [5.1 标记-清除算法](#5.1 标记-清除算法)
            • [5.2 复制算法](#5.2 复制算法)
            • [5.3 标记-整理算法](#5.3 标记-整理算法)
1. 说明
  • 1.垃圾回收不会涉及到虚拟机栈。
2. 虚拟机栈的特点
  • 1.虚拟机栈(Java Virtual Machine Stack),早期也叫Java栈,是线程私有的。
  • 2.每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的Java方法调用。
  • 3.栈是一种快速有效的分配存储方式,访问速度仅次于程序计数器。
3. 虚拟机栈的作用
  • 1.虚拟机栈主管Java程序的运行,它保存方法的局部变量、部分结果,并参与方法的调用和返回。
  • 2.具体来说,栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。
4. 垃圾回收与虚拟机栈的关系
  • 1.由于虚拟机栈是线程私有的,且其内存分配和回收具有确定性(随线程而生、随线程而灭),因此垃圾回收不会涉及到虚拟机栈。
  • 2.当栈帧对应的方法执行完后,栈会将该方法对应的栈帧弹出栈,释放内存,这是由JVM自动完成的,不需要垃圾回收器的介入。
5. 垃圾回收的主要算法
5.1 标记-清除算法
  • 1.标记阶段遍历所有的GC Roots对象,对从GC Roots对象可达的对象都打上一个标识。
  • 2.清除阶段则对堆内存进行遍历,如果发现某个对象没有被标记为可达对象,则将其回收。
  • 3.但标记和清除两个阶段的效率都不高,且标记清除之后会产生大量不连续的内存碎片。
5.2 复制算法
  • 1.将可用内存按容量划分为大小相等的两块,每次使用其中的一块。
  • 2.当这一块的内存用完了,就将还存活的对象复制到另一块内存上,然后把这一块内存所有的对象一次性清理掉。
  • 3.复制算法优化了标记清除算法的效率低、内存碎片多问题,但如果对象的存活率很高,那么复制存活对象的时间代价也是不可忽视的。
5.3 标记-整理算法
  • 1.标记过程与标记/清除算法一样,但后续步骤不是直接对可回收对象进行回收,而是让所有存活的对象都向一端移动,然后直接清理掉端边线以外的内存。
  • 2.这样就解决了内存碎片的问题。
相关推荐
wuminyu16 小时前
深入剖析 Panama Off-heap 的性能损耗与开销
java·linux·c语言·jvm·c++
uoKent19 小时前
c++中new和malloc的区别
java·jvm·c++
~木雨21 小时前
String 底层原理与常量池全解析:byte []+coder、intern 陷阱、substring 内存泄漏,一篇讲透
java·jvm·内存优化·string·字符串常量池
cfm_29141 天前
ThreadLocal 内存泄漏
java·jvm
liangbo71 天前
JVM规范第 6 章:Java 虚拟机指令集
java·jvm
2501_937860942 天前
Java多线程初阶(下)—— synchronized、volatile、wait/notify与经典并发工具
java·开发语言·jvm
二十雨辰2 天前
[Java]-JVM面试题
java·开发语言·jvm
IT_Octopus2 天前
G1 与 GC 日志入门课程(以本次离线菜单 Full GC 事故为教材)
java·jvm
疯狂打码的少年2 天前
【数据库技术】关系代数连接运算(等值连接/自然连接/外连接)
jvm·数据库·笔记·oracle
ly76893 天前
Java 21 到 Java 26 新特性详解:虚拟线程、模式匹配、结构化并发、HTTP/3 与 AOT
java·jvm