| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> PHP知识库 -> 读《深入理解Java虚拟机,JVM高级特性和最佳实践》笔记|垃圾回收概念 -> 正文阅读 |
|
[PHP知识库]读《深入理解Java虚拟机,JVM高级特性和最佳实践》笔记|垃圾回收概念 |
方法区的垃圾回收方法区存放着一些常量(字符串,整型…),类的信息(Class), 且在1.7中位于永久代(Permanent General),发生垃圾收集的可能比较小, 但并非不会进行垃圾收集, 方法区的收集主要分为两部分 1.废弃的常量当没有引用再指向一个常量时,也就是程序无法再获取到该常量时,(和对象的死亡差不多) 当进行垃圾收集时,垃圾收集器觉得有必要的话,会对该废弃常量进行收集 2.不使用的类型Class类回收Class类型的条件比较苛刻,必须满足以下条件
显示类的加载和卸载信息的JVM参数(只能在product版本的虚拟机中使用)
本来想换以下jdk版本试一试上诉的参数,下了新版jdk又觉得挺麻烦,还是不搞事了 分代收集理论大多数的虚拟机的垃圾收集器的工作都基于分代收集理论 垃圾收集器的一致性收集原则,即将Java堆划分出一定的区域,按区域对对象进行存储和收集 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6gyLTUWZ-1631979190654)(F:\LocalTyproPictrue\s1231231.png)]
使用-XX:+PrintGCDetails把jdk17的垃圾日志打开看一看 再对比以下正在使用的jdk8的垃圾收集日志 这里明确的将新生代划分为了 **eden,from,to三个区,**但日志并没有告诉使用的是什么垃圾收集器 那去cmd里查一下 放到网上查了一下 ParallelGC代表 但垃圾收集日志的老年代显示的为ParOld,明显使用了ParallelOld堆老年代进行收集, 这是因为在开启UserParallelGC的环境下,也会默认开启UserParallelOldGC,所以使用了ParOld 这里有一个具体说明的连接 JVM默认老年代回收是 PSMarkSweep(Serial-Old) 还是Parallel Old? - 知乎 (zhihu.com) 所以不同的垃圾收集器设计上还是有很大区别的 垃圾收集算法1.标记----------------清除算法最基础的垃圾回收算法 算法分为标记和清除两个过程 概念:标记出所有需要回收的对象,完成后统一回收所有标记的对象 二个缺点 1.大量的标记和清除动作,执行效率不稳定 2.空间碎片化,导致出现内存碎片,不利于之后大对象的创建 2.标记----------------复制算法也是现在大多数垃圾收集器使用的算法 上述的jdk8的垃圾收集日志也可以验证 概念:将内存划分为两块,每次只使用其中一块,但使用的那一块内存用完了, ? 就将其中还在使用的对象(活着的对象)复制到没使用的内存, ? 再将使用过的那块内存清空 优点:不会产生内存碎片。 ? 简单,操作效率高 缺点:浪费了一半的内存空间 (Appel式回收:将新生代分为一个Eden区,和两个较小的survivor区,每次使用Eden区和一个survivor区,当发生垃圾回收时,将Eden区和使用的survivor区的存活对象复制到林一个survivor区,然后清除调Eden区和使用过的survivor区) Hotspot虚拟机将Eden区和survivor区的比例设置为8:1,因为有两个survivor区,所有每次可使用的新生代空间总是为90%, 当survivor区在一次MinorGC时无法容纳全部的存活对象时,需要借助其他的内存空间,(进入老年代内存?) 3.标记----------------整理算法针对上诉标记,复制算法不适合在老年代进行收集(如果对象的存活率较高,则需要频繁的进行对象的复制,而对于存活率较高的老年对象不适合频繁的复制和移动) 概念:在标记了所有的存活对象后,将所有对象都向内存的一边移动,然后在将边界外的内存全部清空(与标记----清除算法的区别是,前者是非移动式的,后者是移动式的) 对象移动操作的利弊 对象的移动操作需要全程暂停用户程序,(不然肯定会有内存错误了), 这种暂停被称为 ‘Stop the world’ (幻视 The world扎瓦鲁多) 但如果不移动虽然能够减少这种暂停所需要的时间,但也会造成内存的碎片(影响程序的吞吐量) PS(Parelle Scanvenge关注吞吐量的,采用标记整理,CMS则是标记—清除) |
|
PHP知识库 最新文章 |
Laravel 下实现 Google 2fa 验证 |
UUCTF WP |
DASCTF10月 web |
XAMPP任意命令执行提升权限漏洞(CVE-2020- |
[GYCTF2020]Easyphp |
iwebsec靶场 代码执行关卡通关笔记 |
多个线程同步执行,多个线程依次执行,多个 |
php 没事记录下常用方法 (TP5.1) |
php之jwt |
2021-09-18 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年12日历 | -2024/12/29 3:58:32- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |