搜集过程 初始标记(CMS-initial-mark) 并发标记(CMS-concurrent-mark) 预清理(CMS-concurrent-preclean) 可被终止的预清理(CMS-concurrent-abrotable-preclean) 重新标记(CMS-remark) 并发清除(CMS-concurrent-sweep) 并发重置状态等待下次CMS触发(CMS-concurrent-reset) 初始标记(CMS-initial-mark) 该阶段是整个CMS流程中第一个stop-the-worl…

6月 30, 2021 0条评论 384点热度 0人点赞 阅读全文

在Class初始化完成后,类在调用过程中,执行引擎会把字节码转换为机器码,然后在操作系统中才能执行。在字节码转换为机器码的过程中,虚拟机中还存在着一道编译, 就是即时编译 最初,虚拟机中的字节码是由解释器完成编译的,当虚拟机发现方法或者代码块自行频繁时,就会讲代码标记为热点代码 为了提高热点代码的执行效率,在运行时,即时编译器(JIT)会把这些代码编译成与本地平台相关的代码,并进行各层次的优化,然后保存在内存中。 即时编译类型 在HotSpot虚拟机中,内置了两个JIT, 分别为C1编译器和C2编译器,这两个编译器…

6月 29, 2021 0条评论 410点热度 0人点赞 阅读全文

Switch查找case的方式 tableswitch: a table with keys and labels lookupswitch: uses a table with labels only(采用二分查找法) tableswitch 当使用tableswitch时,从stack中获取int值,并直接通过index获取需要跳转的label, 并且立即执行跳转操作。在整个lookup + jump进程中,时间复杂度为O(1) public static void testSwitch(String type…

4月 15, 2021 0条评论 352点热度 0人点赞 阅读全文

GC Roots包含哪些(哪些可以作为gc roots) 所谓的GC roots 是垃圾搜集器特有的对象, 垃圾搜集器搜集哪些非GC root的对象并且无法通过GC roots引用直接访问的对象。 一个对象可以属于多个roots, GC roots有一下几种: Class 由系统类加载器加载的类, 永远不能回收这样的类(自定义的类加载器不是root, 除非响应的实例恰好是其他java.lang.Class的类型的root) Thread - 存活的线程 Stack Local - Java方法局部变量或者参数 JN…

4月 15, 2021 0条评论 333点热度 0人点赞 阅读全文

-Xms 代表着最小堆, 在jvm启动时就会分配到该大小的区域 -Xmx 代表最大堆, 在jvm最小堆不能满足需求时, 对jvm内存进行扩展, 直到最大堆的内存大小 -Xmn 代表新生代区域的大小 -XX:SurvivorRatio 代表着Eden区域与Survivor区域的比例. 一般Survivor的区域有两个。例如:-XX:SurvivorRatio = 3;则Survivor的大小 = 1/5 * 新生代大小 -XX:NewSize 设置新生代大小 -XX:NewRatio 设置新生代与老年代比值。例如:-…

3月 21, 2021 0条评论 454点热度 0人点赞 阅读全文