JVM内存模型及垃圾回收机制

本文详细介绍了JVM运行时数据区的逻辑结构,包括堆内存、新生代、老年代和持久代的划分,以及各自的垃圾回收算法。探讨了JVM如何通过标记-复制和标记-整理算法进行内存管理,同时解释了GC Roots、可达性分析和不同类型的引用(强引用、软引用、弱引用、虚引用)的概念和应用场景。

JVM 运行时数据区(逻辑结构)

在这里插入图片描述

JAVA Memory Model(JAVA内存模型)

堆内存

新生代

8 eden:新生对象
1 survivor from
1 survivor to

回收算法: 标记-复制(将可用内存划分为大小相等的两块,每次只用其中一块,当这块用完后,把活着的对象移动到另一块,清除这块内存)
Minor GC时,对eden和from区域进行回收,存活的对象移动到TO,下次GC时,从TO复制到FROM ,再次进行GC。

老年代

存放生命周期较长、较大的对象
回收算法:标记-整理(标记可回收对象,将存活对象移动到一端,清理掉端外内存)
Major GC/Full GC

持久代

存储类的元数据
Major GC

判断哪些需要被垃圾回收

1.引用计数法

被引用次数为0,才会被回收

2.可达性分析

GC Roots 到目标是否具有可达性
可以作为GC root的对象有:
1.局部变量表中应用的对象
2.方法区中:静态变量引用的对象、常量
3.本地方法栈中JNI引用的对象

不可达不一定进行回收,先判断是否需要调用finalize(),如果需要,调用后,对象没有重新建立引用,则进行回收。

-xx: +printGC 输出GC日志

引用

强引用:

只要引用存在,垃圾回收器永远不会回收

Object obj = new Object();

软引用:

非必须引用,内存溢出之前进行回收,可以通过以下代码实现

Object obj = new Object();
SoftReference sf = new SoftReference(obj);
obj = null;
sf.get();//有时候会返回null
这时候sf是对obj的一个软引用,通过sf.get()方法可以取到这个对象,当然,当这个对象被标记为需要回收的对象时,则返回null;
软引用主要用户实现类似缓存的功能,在内存足够的情况下直接通过软引用取值,无需从繁忙的真实来源查询数据,提升速度;当内存不足时,自动删除这部分缓存数据,从真正的来源查询这些数据。

弱引用:

第二次垃圾回收时回收,可以通过如下代码实现

Object obj = new Object();
WeakReference wf = new WeakReference(obj);
obj = null;
wf.get();//有时候会返回null
wf.isEnQueued();//返回是否被垃圾回收器标记为即将回收的垃圾
弱引用是在第二次垃圾回收时回收,短时间内通过弱引用取对应的数据,可以取到,当执行过第二次垃圾回收时,将返回null。
弱引用主要用于监控对象是否已经被垃圾回收器标记为即将回收的垃圾,可以通过弱引用的isEnQueued方法返回对象是否被垃圾回收器标记。

虚引用:

垃圾回收时回收,无法通过引用取到对象值,可以通过如下代码实现

Object obj = new Object();
PhantomReference pf = new PhantomReference(obj);
obj=null;
pf.get();//永远返回null
pf.isEnQueued();//返回是否从内存中已经删除
虚引用是每次垃圾回收的时候都会被回收,通过虚引用的get方法永远获取到的数据为null,因此也被成为幽灵引用。
虚引用主要用于检测对象是否已经从内存中删除。

基于NSGA-III算法求解微电网多目标优化调度研究(Matlab代码实现)内容概要:本文围绕基于NSGA-III算法的微电网多目标优化调度展开研究,重点介绍了如何利用该先进多目标进化算法解决微电网系统中多个相互冲突的目标(如运行成本最小化、碳排放最低、供电可靠性最高等)的协同优化问题。文中结合Matlab代码实现,详细阐述了NSGA-III算法的基本原理、在微电网调度模型中的建模过程、约束条件处理、目标函数设计以及仿真结果分析,展示了其相较于传统优化方法在求解高维、非线性、多目标问题上的优越性。同时,文档还提供了丰富的相关研究案例和技术支持背景,涵盖电力系统优化、智能算法应用及Matlab仿真等多个方面。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事能源优化领域的工程技术人员;尤其适合正在进行微电网调度、多目标优化算法研究或撰写相关论文的研究者。; 使用场景及目标:①掌握NSGA-III算法的核心思想及其在复杂能源系统优化中的应用方式;②学习如何构建微电网多目标调度模型并利用Matlab进行仿真求解;③为科研项目、毕业论文或实际工程提供算法实现参考和技术支撑。; 阅读建议:建议读者结合文中提供的Matlab代码实例,逐步调试运行并深入理解算法流程与模型构建细节,同时可参考文档中列出的其他优化案例进行横向对比学习,以提升综合应用能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值