【JVM】一文掌握JVM垃圾回收机制

作为Java程序员,除了业务逻辑以外,随着更深入的了解,都无法避免的会接触到JVM以及垃圾回收相关知识。JVM调优是一个听起来很可怕,实际上很简单的事。
感到可怕,是因为垃圾回收相关机制都在JVM的C++层实现,我们在Java开发中看不见摸不着;而实际很简单,是因为它说到底,也只是JVM替我们实现的垃圾对象回收机制,也是普通的程序代码,只要理解了垃圾回收器的底层设计思想,掌握JVM调优并非难事!

jvm

一、JVM内存模型

JVM内存模型

元数据区:JDK8之前是方法区。存放虚拟机加载的:类型信息,域(Field)信息,方法(Method)信息,常量,静态变量,即时编译器编译后的代码缓存
虚拟机栈:虚拟机栈中保存了每一次方法调用的栈帧信息,栈帧中包含以下信息:

  • 局部变量表:保存函数 (即方法) 的局部变量
  • 操作数栈:保存计算过程中的结果,即临时变量
  • 动态链接:指向方法区的运行时常量池。字节码中的方法调用指令以常量池中指向方法的符号引用为参数。
  • 方法的返回地址

本地方法栈:和虚拟机栈功能上类似,它管理了native方法的一些执行细节,而虚拟机栈管理的是Java方法的执行细节。
程序计数器:程序计数器记录线程执行的字节码行号,如果当前线程正在运行native方法则为空。每个线程都有自己的计数器
:JVM中产生的实例对象的存储位置

所谓的垃圾回收,主要就是回收JVM中堆内存的区域

二、垃圾定义

  1. 引用计数(ReferenceCount):存在循环引用的问题,漏掉循环引用的垃圾
  2. 根可达算法(RootSearching):判断对象是否可通过引用寻到JVM的根节点,不能则是垃圾

三、垃圾回收算法

  1. 标记清除(mark sweep) - 位置不连续 产生碎片 效率偏低(两遍扫描)

标记清除

  1. 拷贝算法 (copying) - 没有碎片,浪费空间

拷贝算法

  1. 标记压缩(mark compact) - 没有碎片,效率偏低(两遍扫描,指针需要调整)

标记压缩

相关推荐

  1. jvm | 垃圾回收机制

    2024-01-02 08:18:03       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-02 08:18:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-02 08:18:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-02 08:18:03       82 阅读
  4. Python语言-面向对象

    2024-01-02 08:18:03       91 阅读

热门阅读

  1. python3使用sqlite3构建本地持久化缓存

    2024-01-02 08:18:03       60 阅读
  2. 【PostgreSQL】从零开始:(四十二)系统列

    2024-01-02 08:18:03       49 阅读
  3. 怎么获取客户端真实IP?GO

    2024-01-02 08:18:03       61 阅读
  4. django静态文件命名空间

    2024-01-02 08:18:03       58 阅读
  5. Django通用视图

    2024-01-02 08:18:03       51 阅读
  6. iostat获取IO延迟单位从ms调整us的方案

    2024-01-02 08:18:03       57 阅读
  7. 微信小程序如何分包管理

    2024-01-02 08:18:03       55 阅读