GC之复制算法

复制算法


  • 好处:没有内存的碎片~
  • 坏处:浪费了内存空间~:多了一半空间永远是空to。假设对象100%存活(极端情况)

复制算法最佳使用场景:对象存活度较低的时候;新生区~

推荐这些文章:

扩容新生代为什么能够提高GC的效率

扩容新生代为什么能够提高GC的效率

该文章默认读者对JVM的基础有所了解
在学习JVM的时候,遇到了个人感觉比较有意思的问题,通过视频学习整理了一下。

先来上图:

大部分情况下,对象都会进入Eden区进行分配,当该空间满了以后,进行轻GC,如果对象存活,则会进入s0或者s1。
扩展:如何判断对象存活

采用根可达性分析算法来判断
可作为根的对象有:

虚拟机栈中引用的对象
本地方法栈中引用的对象
方法区中类静态属性引用的对象
方法区常量引用的对象

GC的耗时由两部分组成:

扫描整个新生代所要花费的时间
将存活对象复制到幸存区的时间

所以CG耗时=T1+T2;
假设:
新生代空间...

.NET内存性能分析指南

.NET Memory Performance Analysis

知道什么时候该担心,以及在需要担心的时候该怎么做
译者注
作者信息:Maoni Stephens - 微软架构师,负责.NET Runtime GC设计与实现 博客链接 Github
译者:Bing Translator、INCerry 博客链接:https://incerry.cnblogs.com 联系邮箱:incerry@foxmail.com
本文已获得Maoni大佬授权,另外感谢@晓青、@贾佬、@黑洞、@晓晨、@一线码农 在百忙之中抽出时间校对和提出修改建议。
本文Github仓库:https://g...

Java Minor GC、Major GC和Full GC之间的区别以及触发条件

1: Java Minor GC、Major GC和Full GC之间的区别

Minor GC

Minor GC指新生代GC,即发生在新生代(包括Eden区和Survivor区)的垃圾回收操作,当新生代无法为新生对象分配内存空间的时候,会触发Minor GC。因为新生代中大多数对象的生命周期都很短,所以发生Minor GC的频率很高,虽然它会触发stop-the-world,但是它的回收速度很快。

Major GC

Major GC清理Tenured区,用于回收老年代,出现Major GC通常会出现至少一次Minor GC。

Full GC

Full GC是针对整个...

JVM基础学习(二):内存分配策略与垃圾收集技术

Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来

垃圾收集概述
Java内存模型中的堆和方法区是垃圾收集技术所需要关注的终点,因为其他的区域会跟随线程的结束而自动回收。
而需要解决垃圾收集的首要目标便是解决如何判断一个对象已经不需要了从而自动进行回收;判断对象是否可以进行回收的算法可以分为引用计数算法与可达性分析算法。
对于Redis有一些了解的同学应该知道Redis的对象内存回收算法便是使用的引用计数算法;而JVM都是使用的可达性分析算法,在此我们只讨论可达性分析算法。
可达性分析算法
可达性分析算法简而言之便是从一些称为“GC ...

性能测试连载 (21)-jvm 内存空间与 gc 机制

https://pan.baidu.com/s/1df1HDkFzChYNAbsSazizpw 提取码:hhn7jmeter 全系列文档资料
https://pan.baidu.com/s/1rD3H9EGbu0u11E8ofpAl3A 提取码:8q65性能测试初级到高级系列资料
jvm 内存空间分析
 

 

JVM 内存包括区域Heap(堆区)  New Generation(年轻代)  Eden 伊甸园  Survivor From  Survivor To  Old Generation(老年代)方法区  Permanent Genera...

面试官:说一下内存溢出排查过程和工具?我...

点赞再看,养成习惯,微信搜索【三太子敖丙】关注这个互联网苟且偷生的工具人。
本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点、资料以及我的系列文章。

上次给老公们说过了死循环cpu飙高的排查过程,今天就带着老公们看看堆内存溢出我们一般怎么排查的。

cpu100%排查文章
在排查之前,我想jvm的基础知识大家应该都是了解了的吧?
老婆我就是不了解,人家要你说给我听。
行行行,诶真实拿你们没办法,那我就带大家回温一下JVM的内存模型(这玩意跟JAVA内存模型JMM可不一样,不要记错了)
今天我就直说堆,因为溢出是发送在堆中的。
...

JVM学习--堆内存分析

JVM学习--堆内存分析
本章学习堆内存模型、对象分配和对象生命周期原理。部分内容参考Oracle官网以及咕泡学院教材。分析版本为jdk1.8。
@目录JVM学习--堆内存分析对象创建分代区域--Young GenEdenSurvivor分代区域--Old Gen对象生命周期图解java对象生命周期(出生)java对象生命周期(消亡)常见问题
对象创建
public static void main(String[] args) {
Object o = new Object();
}

在java中,一个对象的创建会在java堆中分配一块内存空间。而在java堆中,并不是简单的直接...

Java中的新生代、老年代、永久代和各种GC

JVM中的堆,一般分为三大部分:新生代、老年代、永久代。
 
1、新生代
主要是用来存放新生的对象。一般占据堆的1/3空间。由于频繁创建对象,所以新生代会频繁触发MinorGC进行垃圾回收。
新生代又分为 Eden区、ServivorFrom、ServivorTo三个区。

Eden区:Java新对象的出生地(如果新创建的对象占用内存很大,则直接分配到老年代)。当Eden区内存不够的时候就会触发MinorGC,对新生代区进行一次垃圾回收。
ServivorTo:保留了一次MinorGC过程中的幸存者。
ServivorFrom:上一次GC的幸存者,作为这一次GC的被扫描者。

当...

【软件构造】第八章第一节 软件构造性能的度量原理

第八章第一节 软件构造性能的度量原理
本章是课程覆盖的第5个质量指标:时空性能
这是大家最熟悉的指标,虽然很重要,但并非软件构造中最重要的指标,当其他指标得以优化之后,再去考虑性能问题。
Outline

性能度量指标
存储性能
内存管理:

对象管理模型:静态、堆、栈
内存管理模型:

Java垃圾回收机制

基本概念
GC的四种基本算法

JVM中的GC
JVM GC性能调优

 Notes
## 性能度量指标

时间性能

每条指令、每个控制 结构、整个程序的执行时间
不同语句或控制结构执行时间的分布情况
时间瓶颈在哪里

空间性能

每个变量、每个复杂结构、整个程序的...

谈JVM内存分配与垃圾回收

大家好,我是微尘,最近又去翻了周志明老师的《深入理解Java虚拟机》这本书。已经看了很多遍了,每次都感觉似乎看懂了,但没过多久就忘了。这次翻了第三章的垃圾收集器与内存分配策略,感觉有了新的认识,整理一下分享出来。内容有点多,并且我没怎么配图,一方面是懒,一方面是我想如果在没有图的情况下你都能看懂,那肯定是真正的懂了。就像是上学的时候做的练习册,即便没有后面那几页写着"略"的参考答案你也能把题目做好做完,那才是真的牛批。
以下是正文
Java技术体系中所提倡的自动内存管理最终应该可以归结为自动化的解决两个问题,即给对象动态分配内存和回收分配给对象的内存。通常情况下Java对象在JVM堆上分配内...

文章标题:GC之复制算法
文章链接:https://www.dianjilingqu.com/51414.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
< <上一篇
下一篇>>