Java笔记4--JVM&GC

image.png
image.png

垃圾回收算法

1.引用计数法

image.png

2.复制算法 (新生代)

image.png

复制活的到空的(复 活)

image.png

复制之后有交换,谁空谁是To (To 0 --->往占用0的位置挪)
优点:没有产生内存碎片, 缺点:大对象复制耗时(所以用于新生代)

3.标记清除法 (老年代)

image.png

4.标记整理法 (老年代)

image.png
image.png
t

GC Roots 一定是从Roots开始的

可以作为GC Root的对象

image.png
image.png

盘点家底查看 JVM 默认值

  • 查看初始默认值:-XX:+PrintFlagsInitial
ginseng@ginseng-pc:~/Project/demo$ java -XX:+PrintFlagsInitial
[Global flags]
    intx ActiveProcessorCount                      = -1                                  {product}
    uintx AdaptiveSizeDecrementScaleFactor          = 4                                   {product}
    uintx AdaptiveSizeMajorGCDecayTimeScale         = 10                                  {product}
    uintx AdaptiveSizePausePolicy                   = 0                                   {product}
    uintx AdaptiveSizePolicyCollectionCostMargin    = 50                                  {product}
    uintx AdaptiveSizePolicyInitializingSteps       = 20                                  {product}
    uintx AdaptiveSizePolicyOutputInterval          = 0                                   {product}
    uintx AdaptiveSizePolicyWeight                  = 10                                  {product}
   ...
  • 查看修改更新:-XX:+PrintFlagsFinal
bool UsePSAdaptiveSurvivorSizePolicy           = true                                {product}
bool UseParNewGC                               = false                               {product}
bool UseParallelGC                            := true                                {product}
bool UseParallelOldGC                          = true                                {product}
bool UsePerfData                               = true                                {product}
bool UsePopCountInstruction                    = true                                {product}
bool UseRDPCForConstantTableBase               = false                               {C2 product}

= 与 := 的区别是,一个是默认,一个是人物改变或者 jvm 加载时改变的参数

工作中常用的 JVM 配置参数

image.png

永久代用的是JVM的堆内存

通过-XX:+PrintGCDetails查看GC收集日志


image.png
image.png
image.png
image.png
image.png
image.png

该参数范围只能设置0~15(java8)

引用

image.png

强引用

image.png

软引用

image.png

弱引用

image.png

软/弱引用使用场景

image.png

虚引用

image.png

GC Roots和四大引用总结

image.png

OOM(常见)

image.png
image.png

GC Overhead

image.png

Direct buffer memory

image.png

通常因为NIO导致

unable to create new native thread

image.png

Metaspace

image.png

GC 收集器

image.png

其中,G1收集器是将堆内存分割成不同的区域然后并发的对其进行垃圾回收.

image.png

java8

image.png
image.png

新生代收集器

image.png
image.png
image.png
image.png
image.png
image.png

老年代收集器

image.png
image.png

CMS4步过程


image.png

1.初始标记


image.png

2.并发标记

image.png

3.重新标记


image.png

4.并发清除

image.png

四步总结


image.png

CSM优缺点:
优:并发收集低停顿

缺:1.采用标记清除算法会导致大量内存碎片
2.并发执行对CPU压力大


image.png

缺点主要原因

如何选择垃圾收集器

image.png

G1收集器

image.png
image.png
image.png
image.png

特点


image.png

G1底层原理

image.png
image.png
image.png
image.png

回收步骤


image.png
image.png

四步


image.png

G1较与CMS的优势

image.png
全部评论

相关推荐

03-08 18:11
门头沟学院 Java
Java抽象小篮子:海投就完事了,简历没什么问题,最大问题是学历
点赞 评论 收藏
分享
“无名小卒,还是名扬天下?”我知道很多人都不觉得我能走到今天这一步,当然,也包括我自己。在我的人生里,有两部作品刻下了最深的烙印:《斗破苍穹》与《龙族》。它们总被人拿来对照:一边是萧炎的桀骜轻狂,一边是路明非的怯懦衰颓。有人说,天蚕土豆没见过魂天帝,但江南见过真凯撒。我时常觉得,自己就是那个衰小孩路明非。可路明非可以开挂,我不可以;我也无数次幻想过,能拥有萧炎那般年少轻狂的人生,可我没有他与生俱来的逆天天赋。我只是个平庸的普通人,一个看过《斗破苍穹》却开不了挂的路明非,只能一步一步往上爬。从我下定决心找实习的那一刻起,我就给自己定下了目标:“我一定要为字节跳动卖命.jpg”。萧炎有他的三年之约,我有我的两年半之约(其实是一年半)。2024.11.20,科大讯飞的第一封实习offer落进邮箱,我迈出了这场奔赴的第一步。2025.8.18,放弃百度转正的安稳机会,转身走进前路未卜的不确定里。我很感谢我在百度的mentor,是她从茫茫人海选中了我,给了我大厂实习的机会。即便有段时间我状态差、产出不理想,她依旧愿意认可我、希望我留下转正。2025.11.14,我选择走进字节跳动,以实习生的身份重新出发。2026.3.25 - 3.31,一周速通上海飞书,幸遇赏识我的伯乐,斩获Special Offer。被告知面试通过的那一刻,我的内心无比平静,就像这个offer本就该属于我。不是侥幸,是应得的。这一路,有人看轻过我的出身,不相信我能走到这里;也有人在我看不见前路的时候,替我举过灯。没有他们的鼓励与支撑,就没有今天站在这里的我。我看到了自强不息的激荡,那是一个双非的伟大乐章!我是雨夜迈巴赫,我要开启属于我的新篇章了。
在看牛客的本杰明很勇...:真心祝贺l总 我永远的偶像 我滴神
春招至今,你收到几个面试...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务