目录

ThasBlog

学无止境

标签: GC (3)

记一次线上 JAVA 程序 OOM 事件 有更新!

依赖三方包: <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> </dependency> <!-- 阿里云SLS提供的SDK --> <dependency> <groupId>com.aliyun.openservices</groupId> <artifactId>aliyun-log</artifactId> <version>0.6.56</version> </dependency> 代码: public class DefaultServiceClient2 extends DefaultServiceClient { // 问题的主要原因出在这个 DefaultServiceCl....

Jvm GC 示例代码 有更新!

jvm参数: -Xms1000m -Xmx1000m -XX:NewRatio=9 -XX:SurvivorRatio=8 -XX:-UseParNewGC -XX:-UseConcMarkSweepGC -XX:+UseSerialGC -XX:+PrintGC -XX:+PrintGCDetails -XX:-UseTLAB java代码: public class Main { static Object[] bs = new Object[500]; public static void main(String[] args) throws Exception { //预留时间连接console Thread.sleep(20000); // 消除程序初始化的影响 System.gc(); for (int i = 0; i < bs.length; i++) { // 分配1mb //建立强引用 bs[i] =new byte[1024*1024]; Thread.sleep(200); } System.gc(); Thread.sleep(10000); } } ....

JVM GC 有更新!

对象引用 强引用 软引用 OOM 之前回收 弱引用 GC 扫描到就回收 幻象引用 不可使用 对象存活分析 引用计数 可达性分析 GCRoots: 栈上引用 存货的线程 方法区静态变量引用 方法区常量引用 本地方法栈引用 对象晋级原则 MinorGC Eden 区进入 Suvivor 区 Suvivor 区对象年龄 +1 Suvivor 对象年龄达到 15(MaxTenuringThreshold 可以设置, CMS 为 4), 晋级到老年代 Suvivor 对象年龄从小到大计算总和, 到达 50%, 超过的年龄将作为新的年龄上限 大对象无法在新生代分配, 直接分配在老年代 MajorGC 只有 CMS 可以独立执行, 其他回收器都会伴随 MinorGC. 垃圾回收算法 复制 标记清除 标记整理 经典垃圾回收器 Serial/Serial Old 初代 GC, 单线程模式, 必须要 Stop The World SerialOld 是最经典的老年代 GC, 可以与任意的新生代 GC 一同使用 ParNew/ConcurrentMa....