先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
正文
- 给新生代使用 串行回收 使用复制算法 是单线程进行标记+回收
ParNew收集器
-
给新生代使用 支持多线程进行GC(并行)
-
回收效率比Serial高
Parallel Scavenge收集器
-
给新生代使用 支持多线程进行GC(并行)
-
设计初衷是为了尽量缩短STW的时间 但是这个是以牺牲吞吐量和新生代空间作为代价的 , 相当于承诺用户 在一定时间内就会完成一次GC虽然我删除的不是很干净 但是能够很大程度上清除大部分垃圾了
Parallel Old收集器
-
老年代收集器 支持多线程执行(并行)
-
ParNew的老年版本
-
这个收集器使用的是标记整理算法 效率更高 但是消耗的CPU资源更多
CMS收集器
-
老年代收集器 支持多线程并行 采用标记-清除
-
特点: 尽肯能缩短STW的时间
a: 初始标记 [STW]
只是把GCRoot直相关的对象先标记起来
b: 并发标记 [耗时 但不涉及STW]
执行整个遍历过程 从GCRoot开始 把所有访问到的对象都遍历一遍 不需要暂停用户线程 虽然耗时但是可以和用户线程并发 并发标记完成后得到的垃圾结果可能就和真实效果存在一定的误差
c: 重新标记 [STW]
修改刚才的误差 由于刚才误差的必经是少数 重新标记代价不是很大 虽然STW了 但是时间很小了
d: 并发清除 [耗时 但不涉及STW]
多线程的方式吧刚才的对象都释放掉 直接清除 当然也可以和应用线程并发执行
-
优点: 能够让STW时间尽量缩短
-
缺点: 内存碎片 应用线程是并发执行的 很消耗cpu的资源
G1(重要)
-
比较新的回收器 Java11开始默认使用的回收器
-
算是最优秀的垃圾回收器
-
老少通吃 既可以回收新生代 也能回收老年代
每一个矩形区域称为一个"region"
E代表伊甸区 S代表生存区 T代表老年代 H表示放大对象的区域
G1代回收的时候不一定需要一次性把整个内存都会收完 而是以region为单位进行回收(回收的粒度更加精细)
针对新生代的region同样是使用复制算法进行回收
针对老年代的回收类似CMS 但还是有一定差距
a: 初始标记
和CMS很类似 只去找GCRoot之间关联的对象 时间较短 会涉及STW
b: 并发标记
可并发, 进行可达性分析 遍历所有对象不涉及STW 和CMS不同的就是 如果发现老年代region已经没有对象存活 就之间回收 不等最后一个环节回收了
c: 最终标记
修正b产生的误差
d: 筛选回收
写在最后
可能有人会问我为什么愿意去花时间帮助大家实现求职梦想,因为我一直坚信时间是可以复制的。我牺牲了自己的大概十个小时写了这片文章,换来的是成千上万的求职者节约几天甚至几周时间浪费在无用的资源上。
上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
ava)**
[外链图片转存中…(img-wQdmy718-1713410069450)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!