代码演示GC回收

news2024/10/7 2:23:10

JVM配置

-XX:NewSize=5m 初始新生代大小
-XX:MaxNewSize=5m 最大新生代大小
-XX:InitialHeapSize=10m 初始堆大小 等同于Xms
-XX:MaxHeapSize=10m 最大堆大小 等同于Xmx
-XX:SurvivorRatio=8 Eden区占80%
-XX:PretenureSizeThreshold=10m 大对象阈值
-XX:+UseParNewGC 新生代使用ParNew
-XX:+UseConcMarkSweepGC 老年代使用CMS
-XX:+PrintGCDetils:打印详细的gc日志
-XX:+PrintGCTimeStamps:这个参数可以打印出来每次GC发生的时间
-Xloggc:gc.log:这个参数可以设置将gc日志写入一个磁盘文件

代码

public class ParNew {

    public static void main(String[] args) {
        System.out.println("main方法压入栈帧-----");
        int size = 1024 * 1024;
        System.out.println("在main的栈帧内创建一个arrarray11变量,并在eden区开辟一块1m的内存,变量arr1指向这块你内存");
        byte[] array1 = new byte[size];
        System.out.println("在堆内存的Eden区中创建第二个数组,并且让局部变量指向第二个数组,第一个数组就没人引用了,此时第一个数组就成了没人引用的“垃圾对象”");
        array1 = new byte[size];
        System.out.println("在堆内存的Eden区内创建了第三个数组,同时让array1变量指向了第三个数组,此时前面两个数组都没有人引用了,就都成了垃圾对象");
        array1 = new byte[size];
        System.out.println("array1这个变量什么都不指向了,此时会导致之前创建的3个数组全部变成垃圾对象");
        array1 = null;
        System.out.println("此时会分配一个2MB大小的数组,尝试放入Eden区中,但是Edeb区只剩1m了,所以会触发Minor GC");
        byte[] arr2 = new byte[2 * size];

    }
}

代码分析

  1. byte[] arr1 = new byte[size];这行代码一旦运行,就会在JVM的Eden区内放入一个1MB的对象,同时在main线程的虚拟机栈中会压入一个main()方法的栈帧,在main()方法的栈帧内部,会有一个“array1”变量,这个变量是指向堆内存Eden区的那个1MB的数组,如下图。

在这里插入图片描述

  1. array1 = new byte[size];此时会在堆内存的Eden区中创建第二个数组,并且让局部变量指向第二个数组,然后第一个数组就没人引用了,此时第一个数组就成了没人引用的“垃圾对象”了,如下图所示。
    在这里插入图片描述

  2. array1 = new byte[size];这行代码在堆内存的Eden区内创建了第三个数组,同时让array1变量指向了第三个数组,此时前面两个数组都没有人引用了,就都成了垃圾对象,如下图所示。
    在这里插入图片描述

  3. array1 = null;这行代码一执行,就让array1这个变量什么都不指向了,此时会导致之前创建的3个数组全部变成垃圾对象,如下图。
    在这里插入图片描述

  4. byte[] arr2 = new byte[2 * size];此时会分配一个2MB大小的数组,尝试放入Eden区中,因为Eden区总共就4MB大小,而且里面已经放入了3个1MB的数组了,所以剩余空间只有1MB了,此时你放一个2MB的数组是放不下的,所以这个时候就会触发年轻代的Young GC。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/25390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最新最全面的Spring详解(五)——事务管理

前言 本文为 【Spring】事务管理 相关知识,下边将对Spring框架事务支持模型的优点,Spring框架的事务抽象的理解(包含TransactionManager、TransactionDefinition、TransactionStatus,编程式事务管理(包含使用 Transact…

(七)笔记.net core学习之反射、加载dll、读取moudle、类、方法、特性

1.反射加载dll、读取moudle、类、方法、特性 (1)模块信息获取 (2)方法调用 2.反射创建对象、反射简单工厂配置文件(破坏单例,创建泛型) (1)程序的可配置可扩展&#xf…

【MEIF:ℓ1-ℓ0混合分解】

Multimodal Medical Image Fusion Using Hybrid Layer Decomposition With CNN-Based Feature Mapping and Structural Clustering (基于CNN的特征映射和结构聚类的混合层分解的多模态医学图像融合) 本文提出了一种特征级多模态医学图像融合&#xff0c…

springboot获取不到客户端ip问题排查

一、现象 springboot从2.0.2升级到 2.5.7后线上环境无法通过request.getHeader("x-forwarded-for")获取客户端ip地址,测试环境正常,开发环境也异常 二、结论 springboot 2.5.7版本中CloudPlatform多了Kubernetes platform的类型识别&#x…

SpringCloud整合Nacos最全教程(简介及安装部署整合)

目录 一、Nacos简介 Nacos与eureka的共同点 Nacos与Eureka的区别 二、Nacos安装配置 在windows中的安装教程 1.首先将windows安装版本的zip解压: 2.如果8848端口被占用,可以修改端口 3.进入到bin目录下,在cmd中运行以下命令启动 4.启…

Webpack 5 超详细解读(二)

11.importLoaders 属性 问题: test.css的内容如下: .title {transition: all .5s;user-select: none; }login.css的内容如下: /* 导入test.css */ import ./test.css; .title {color: #12345678; }再次npm run build发现运行之后的test.c…

外汇天眼:想通过外汇交易在几个月内成为亿万富翁吗?你必须知道的七大交易法则

WikiFX 策略 -这里有七个交易规则,将在不同程度上让您受益。 1.交易不是儿戏 这是一项业务,如果没有适当的计划、战略和有效的运营,就不可能取得长期的成功。 2.损失不可避免 由于市场始终存在风险,因此在您的交易中从多头转为…

C++:项目相互依赖调用解决方法两种方法

Bmodel依赖于Amodel,但是Amodel又需要BModel的信息。这样就会导致相互依赖。 方法一:采用静态变量static 链接:C开发中一个解决方案里,两个项目的相互引用,相互依赖的实现方法(解决方法)_Capri…

P物质肽[DArg1, DTrp5, 7, 9, Leu11]

这种物质P类似物是一种非常有效的小细胞肺癌(SCLC)细胞体外生长的广谱神经肽抑制剂(IC₅₀ 5M)。此外,它在体外有效地抑制信号转导通路,并在体内显著延缓SCLC异种移植物的生长。因此,它可能对SCLC有治疗价值。 编号: 139994中文名称: P物质肽…

数据结构学习笔记(Ⅰ):绪论

课程链接:【旧版】1.0_开篇_数据结构在学什么_哔哩哔哩_bilibili 目录 1 数据结构的基本概念 2 算法 2.1 算法的基本概念 1.算法概念 2.算法的特性 3.好算法特质 2.2 算法的时间复杂度 2.3 算法的空间复杂度 1 数据结构的基本概念 数据:能输入到计算机中并…

Android StudioJNI开发之NDK环境的搭建以及添加JNI支持(图文解释 简单易懂)

有问题可以评论区留言讨论~~~ 一、NDK环境搭建 Android系统的所谓原生开发是在App中调用C/C代码,鉴于这两个语言具有跨平台的特性,如果某项功能使用C/C实现,就很容易在不同平台之间移植。 完整的Android环境包括三个开发工具。分别是JDK SD…

如何缩减layout电路面积?减少晶体管的数量——以全加器为例【VLSI】

如何缩减layout电路面积?减少晶体管的数量——以全加器为例【VLSI】What is Full adder ?全加器的设计方法1. 32T 原始表达式不经过化简的电路图2. 28个晶体管 最基本的静态互补CMOS电路的全加器静态互补CMOS静态互补CMOS的优势与劣势28T 电路图28T的棒状图Stick D…

彻底搞明白概率论:随机事件,样本空间,必然事件,不可能事件

文章目录样本空间样本点随机事件,必然事件,不可能事件参考视频样本空间 随机试验E的一切可能基本结果(或实验过程如取法或分配法)组成的集合称为E的样本空间,记为S 注意,对于不同的实验,样本空间…

【构建ML驱动的应用程序】第 3 章 :构建您的第一个端到端管道

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

FastDFS安装

fastdfs架构图 准备安装包 libfastcommon-1.0.43.tar.gz fastdfs-6.06.tar.gz fastdfs-nginx-module-1.22.tar.gz 一 、FastDFS--tracker安装 FastDFS安装环境 FastDFS是C语言开发,建议在linux上运行,本教程使用Centos7.4作为安装环境。 安装gcc …

如何使用做一个弹幕效果

效果展示 前置准备 背景图 图片素材 具体步骤 添加一个图片背景 添加一个水平滚动容器 添加一个容器 制作弹幕字体 制作弹幕动画效果 步骤分解 添加一个图片背景 拖拽 图片组件 到 编辑区 选中 图片组件 点击 检查面板 中的 样式 调整 图片组件 的 样式 添加一个水平滚动容…

餐饮机器人AB面:有人离场、有人挺进

民以食为天,餐饮生意是一颗“常青树”。 餐饮行业“常青”不代表没有变化,近年来Z世代消费者对餐饮口味、餐饮效率和餐饮安全提出更高要求。与此同时,在新消费、新技术、新模式的推动下,餐饮行业衍生出多元化趋势,外卖…

详解环境变量

目录前言一、什么是环境变量?二、查看环境变量的方法三、查看环境变量的内容四、普通变量VS环境变量五、导出环境变量六、常见的环境变量七、set命令:查看普通变量或环境变量八、C/C语言中main函数中的参数1、main函数的第一个和第二个参数应用&#xff…

IDEA提交本地项目到Gitee远程仓库

上一篇【Git的安装、配置、使用02【Idea对GitHub支持使用】】https://liush.blog.csdn.net/article/details/123446538 1. 新建仓库 2. IDEA登录gitee账号 3. 选择当前的项目作为本地库(相当于初始化) 4. 将项目添加到暂存区中 5. 将暂存区项目文件提交…

【CSS】CSS文本样式【CSS基础知识详解】

👨‍💻个人主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 本文章收录于专栏 【CSS】 【CSS专栏】已发布文章 📁【CSS基础认知】 📁【CSS选择器全解指南】 &#x1f4c1…