| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> JVM3--垃圾回收机制:垃圾回收算法、垃圾回收器 -> 正文阅读 |
|
[数据结构与算法]JVM3--垃圾回收机制:垃圾回收算法、垃圾回收器 |
一、垃圾回收概述?1、垃圾对象:运行程序中没有任何指针指向的对象2、垃圾回收区域:?方法区+堆空间? ? ? ?频繁回收Young区 ? ? ? ?较少回收old区 ? ? ? ?基本不动Perm区(或元空间) 3、垃圾回收的两个阶段? (1)标记阶段 ? ? ? ? 引用计数算法 ? ? ? ? 可达性分析算法 ?(2)清除阶段 ? ? ? ?标记-清除算法 ? ? ? ?标记-复制算法 ? ? ? ?标记-压缩算法 4、运行时数据区垃圾回收情况? ?(1)方法区------------有GC+OOM(outofmemory内存溢出,堆溢出) ? ? (2)堆----------------有GC+OOM ? ? (3)程序计数器-------都没有 ? ? (4)本地方法栈-------没有GC,有SOF(stack over flow栈溢出) ? ? (5)虚拟机栈------------没有GC,有SOF 二、垃圾标记阶段?目的:区分出内存中哪些是存活对象,哪些是死亡对象 ? ? ? ? ? ?当一个对象已经不在被任何的存活对象继续引用时,就是垃圾对象 (一)引用计数法(java中不用)1、每个对象保存一个整型的引用计数器属性,用于记录对象被引用情况 2、当一个对象引用该对象,引用计数器就+1,当引用失效时,引用计数器就-1 ? ??只要对象的引用计数器的值为0,则表示对象可进行回收 3、缺点? ?(1)需要单独的字段存储计数器,增加空间开销? ? ?(2)经常更新计数器,增加增加开销 ? ?(3)无法处理循环引用情况 (二)可达性分析(根搜索算法,追踪性垃圾收集)1、可以解决循环引用问题2、使用条件? ? 保证数据一致性 2、原理:? ?以跟对象集合为起始点(GC Roots), ? ?按从上至下的方式搜索被根对象集合所连接的对象是否可达 ? ?可达---非垃圾;不可达---垃圾 3、根对象集合(GC Roots )? ?一组必须活跃的引用,主要有以下几类元素: ?(1)Java虚拟机栈中引用的对象 :局部变量 ?(2)本地方法栈中引用的对象:引用类型静态变量,类变量 ? ?(3)方法区中引用的常量对象:字符串常量池里的引用 ?(4)被同步锁synchronized持有的对象 ? ?(5)分代收集和局部回收 4、MAT---可以查询GC Root??? ? ?一款强大的Java堆内存分析器 ?5、对象的状态? ? ? ?可触及----不是垃圾 ? ? ? ?可复活---是垃圾,但是可以通过调用重写的finalize()复活 ? ? ? ?不可触及--是垃圾,且已经调用了finalize(),但这个方法只能被调用一次,因此不可再复活 三、垃圾清除阶段待更..... |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 8:31:16- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |