摘要: 过程描述 优先在eden分配 大对象直接进去老年代 年轻代分配失败 进行minor gc minor gc前会 老年代内存“分配担保” 最大的连续空闲空间大于 历次晋升对象总大小 是 安全进行minor gc 否 先进行full gc minor gc 后 survivor 容纳不下的存活对象,晋升 阅读全文
posted @ 2021-03-16 23:45 mushishi 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 实验代码 /** * -Xmn10M -Xms20M -Xmx20M -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=15 * -XX:PretenureSizeThreshold=3M -XX:+UseParNewGC -XX:+UseConcMarkSw 阅读全文
posted @ 2021-03-16 23:42 mushishi 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 实验一: 存活对象包含 小于survivor大小的对象 + 大于survivor的对象 private static final Integer _1MB = 1024 * 1024; /** * -XX:+UseSerialGC -Xms20M -Xmx20M -Xmn10M -XX:+Print 阅读全文
posted @ 2021-03-16 23:14 mushishi 阅读(369) 评论(0) 推荐(0) 编辑
摘要: 理论 正常情况下, 年轻代空间里边的对象熬过 MaxTernuringThreshold 才能晋升到老年代;但是如果 survivor 空间中 年龄1 + 年龄2 +年龄3 +…. + 年龄n (n>1)的这些对象大小的总和大于 survivor 空间的一半, 年龄大于或等于该年龄 n 的对象就会直 阅读全文
posted @ 2021-03-16 23:06 mushishi 阅读(940) 评论(0) 推荐(1) 编辑
摘要: 永久代和栈内存大小一般较为固定 永久代(元数据区)也就存放类的元数据 一般512m就够了 -XX:MaxMetaspaceSize=512m -XX:MetaspaceSize=512m 比如我司线上环境的metaspace占用稳定在100m出头,如果机器配置低点2C4G的话,设置为256M也是够的 阅读全文
posted @ 2021-03-16 22:46 mushishi 阅读(407) 评论(0) 推荐(0) 编辑
摘要: 要解决的问题 系统要部署多少台机器 每台机器的内存空间 每台机器jvm堆内存大小 jvm内存空间要多少,才能支撑这么多对象的创建 不至于进程直接奔溃 内存压力计算 qps估算 日活用户数量、高峰期时段多久、用户行为涉及到的接口、接口中创建的对象大小 举例: (1) 假设用户系统高峰期 1w+qps 阅读全文
posted @ 2021-03-16 22:29 mushishi 阅读(665) 评论(0) 推荐(0) 编辑
摘要: 叨逼叨 自己之前也看过一些关于jvm的书籍,知道jvm的内存分几个区域、一个对象从创建到销毁在这个几个区域是怎么扭转的,类加载机制是怎么样的、知道几种回收算法、也大概清楚常见垃圾回收器的基本执行过程,好像常见的oom、fullgc排查工具和步骤也清楚,应付一般的面试的话基本也ok 但是,当在工作中实 阅读全文
posted @ 2021-03-16 00:13 mushishi 阅读(96) 评论(0) 推荐(0) 编辑