随笔分类 - JVM底层原理和性能调优
摘要:如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。 Serial收集器: Serial(串行)收集器是一个单线程的收集器,单线程一方面意味着它 只会使用一个CPU或者一条线程去完成垃圾收集工作,另一方面也意味着它进行垃圾收集时必须暂停其他线程的所有工作(“Stop The Wo
阅读全文
摘要:前面已经知道了如何判断对象会被回收。那么现在来分析一下这些垃圾对象是如何被收集的,通过什么算法收集的。 GC 常用算法有: 标记-清除算法 复制算法 标记-整理算法 分代收集算法 目前主流的jvm(HotSot)采用的是分代收集算法。 标记-清除(Mark-Sweep)算法 算法分为“标记”和“清除
阅读全文
摘要:jvm是如何判断对象可以被回收的? 方法一:引用计数法 jvm给对象中添加一个引用计数器,每当有一个地方引用它,计数器加1,当引用失效,计数器减1,任何时候计数器为0的对象就是不可能再被使用的。 此方法存在的局限性:不能解决对象之间相互引用的问题。例如: 如上图所示,栈中引用了堆中对象objA和ob
阅读全文
摘要:JVM三种运行模式: 解释模式(Interpreted Mode):只使用解释器(-Xint强制JVM使用解释模式),执行一行JVM字节码就编译一行为机器码。(可以马上看到效果,但是运行过程比较慢) 编译模式(Compiled Mode):只使用编译器(-Xcomp强制JVM使用编译模式),先将所有
阅读全文
摘要:由上图可以看出: 堆中分为新生代(占堆1/3内存)和老年代(占堆2/3内存), 新生代又分为Eden区(占新生代内存的8/10)和survivor区(占新生代内存的2/10), survivor区又分为from区和to区(各占新生代内存的1/10) 我们知道new出来的对象都是方在堆里面,那么具体在
阅读全文
摘要:假如运行以下Math.hava类 package com.cjc.classload; public class Math { public static final Integer COUNTAGE = 666; public static User user = null; public int
阅读全文
摘要:一、 Java中有如下几种类加载器: 启动类加载器:负责加载支撑JVM运行的位于JRE的lib目录下的核心类库,比如rt.jar、charsets.jar等。 扩展类加载器:负责加载支撑JVM运行的位于JRE的lib目录下的ext扩展目录中的JAR类包。 应用程序加载器:负责加载ClassPath路
阅读全文
摘要:类加载:类加载器将class文件加载到虚拟机的内存中(放在方法区中) 类加载过程: 加载:在硬盘上查找并通过IO读入字节码文件。 连接:执行校验、准备、解析步骤。 校验:校验字节码文件的正确性。(a.校验文件格式:是否为.class文件 b.检验元数据:是否符合java语言规范 c.检验字节码:程序
阅读全文