先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
正文
- 担保机制
- 大对象直接进入老年代
- 长期存活的对象
- 动态年龄判断
1、担保机制
1.1什么是担保机制
我们都用过花呗借呗、或者信用卡吧? 就是你身上的前不够用的时候,你可以去借信用卡、借花呗、借借呗,但是你必须有个东西来担保,不然人家凭什么借给你?现在来说一般都是用你的信用分来担保的,就像支付宝有芝麻信用分数;还有一些比较大的数目是需要你用车子或房子来抵押的,这就是担保,以确保你不会跑掉;那其实jvm在内存分配的时候也有担保机制,就是你的新生代内存不足的时候,通过担保分配的方式让大对象直接分配到老年代;
1.2 代码示例
接下来,我们运行一组代码测试一下,在运行前需要先加上以下几个jvm的参数
-XX:+PrintGCDetails -verbose:gc -Xms30M -Xmx30M
参数说明
* -XX:+PrintGCDetails 程序执行完成后打印内存使用情况
* -verbose:gc 每次GC后打印日志
* -Xms30M 初始堆内存
* -Xmx30M 最大堆内存
java 代码 GcTest.java
public class GcTest {
// 占用1MB空间
private static final int _1MD = 1024 * 1024;
public static void main(String[] args) {
byte[] bytes = new byte[2 *_1MD];
byte[] bytes1 = new byte[2 * _1MD];
byte[] bytes2 = new byte[2 * _1MD];
byte[] bytes3 = new byte[6 * _1MD];
}
}
运行后结果如下
由上面的结果可以看到,前面的三个 2M 的对象都分配到了eden (伊甸)区,此时eden区的内存占用已经达到了 99%,第四个占用了6M的对象因为eden区已经放不下了,所以通过了担保机制直接分配到了 ParOldGen (老年代 ) ;
2、大对象直接进入老年代
2.1 多大的对象才能称为大对象?
这个大对象的大小是由用户指定的,使用以下jvm参数进行指定
-XX:PretenureSizeThreshold=对象大小(单位:byte)
这个参数的默认值为0,也就是说,所有的对象创建出来之后默认都是分配到新生代的,当我们指定了大小之后,只要创建出来的对象超过设定值,那么这个对像就会直接晋升到老年代;
需要注意的是:PretenureSizeThreshold参数只对Serial和ParNew两款收集器有效,
2.2 代码示例
首先,加上以下几个参数
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
N-1713301964402)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!