深入理解Java虚拟机
doraemon7
这个作者很懒,什么都没留下…
展开
-
[JVM] G1回收器(二)
G1回收器(二)时间停顿模型:能够在一个指定长度为M毫秒的时间段内,消耗在垃圾收集上的时间大概率不超过N毫秒该模型就是G1回收器需要实现的目标在G1之前,所有的垃圾回收器的回收目标都是一整个分代,如整个新生代,整个老年代,或者整个Java堆,G1则不同,它不再面向单个分代来进行垃圾回收,而是使用回收集(Collection Set),回收集的组成可以是任意的堆内存,衡量回收集的标准是,哪块内存存放垃圾最多,回收收益最大,这个就是G1独有的Mixed GC模式G1中同样存在新生代、老年代的划分,但是G原创 2020-07-10 12:13:38 · 206 阅读 · 0 评论 -
[JVM] GC日志中的Metaspace
GC日志中的Metaspace和class space参考文章: java面试:你真的知道metaspace??参考文章: 理解JVM堆中Metaspace的输出在GC日志中,有这么一段 Metaspace used 2652K, capacity 4486K, committed 4864K, reserved 1056768K class space used 286K, capacity 386K, committed 512K, reserved 1048576K翻译 2020-06-10 07:04:35 · 1285 阅读 · 0 评论 -
[JVM] G1回收器介绍
G1回收器在使用ParNew + CMS进行垃圾回收时,会导致长时间的STW,而STW的本质就是停止系统的工作线程,让系统无法对外服务,同时让GC线程进行垃圾回收的。如果回收时间较长,那么会给系统性能带来较大的影响因此G1回收器出现了,它的特点有将Java堆分为多个大小相等的Region每个Region都有可能属于新生代或老年代可以设置垃圾回收的预期停顿时间,比如在一小时内最多停顿一分钟G1如何做到设置垃圾回收的预停顿时间G1会追踪每个Region中的回收价值(当前Region原创 2020-06-09 07:25:17 · 269 阅读 · 0 评论 -
[JVM] 老年代的垃圾回收
老年代的垃圾回收什么情况下对象会进入到老年代在JVM中,每个对象都有一个GC年龄,当发生GC时,如果对象没有被回收,那么它的GC年龄就+1默认情况下,GC年龄超过15的对象会进入老年代,如果想自定义这个年龄可以通过JVM参数-XX:MaxTenuringThreshold来设置动态年龄判断,如果在Survivor区域中,有一半以上的同年龄对象占用的内存超过50%,那么所有年龄大于等于该年龄的对象都会进入老年代大对象直接进入老年代,通过JVM参数-XX:PretenureSizeThreshold原创 2020-06-02 22:06:20 · 2446 阅读 · 0 评论 -
深入理解Java虚拟机(学习笔记) - Day1
JVM的种类Sun Classic VM:仅支持解释器执行Sun Exact VM:编译器和解释器混合工作以及两级即时编译器仅发布在Solaris平台Exact Memory Management 准确试内存管理Sun HotSpot VM:JIT热点代码编译,通过计数器找到经常执行的代码,直接编译为机器码KVM (KiloByte):运行与手机平台JRockit:专注于...原创 2018-12-14 15:30:29 · 163 阅读 · 0 评论 -
深入理解Java虚拟机(学习笔记) - Day2 - 对象
对象的创建类加载检查当遇到new指令时,首先会检查常量池中是否能定位到一个类的符号引用,并且检查这个类的符号引用代表的类是否已经被加载、解析和初始化过,如果没有,就必须先执行类加载过程为新生对象分配内存内存分配一般有两种方式,“指针碰撞(Bump The Pointer)”:假设Java堆中的内存都是规整的,所有用过的内存放在一边,没用过的内存放在另一边,中间放着作为分界点的指...原创 2018-12-14 15:32:18 · 116 阅读 · 0 评论 -
深入理解Java虚拟机(学习笔记) - Day2 -如何知道对象是否死亡
如何判断对象是否已经死亡引用计数法给对象添加一个引用计数器,每当对象在一个地方被引用时,这个计数器的值就+1,当引用失效时,这个计数器的值就-1,当计数器的值为0时,表示这个对象在任何地方都没有被引用,即该对象已经死亡。由于很难解决对象之间的循环引用问题,所以该方法没有被应用在JVM中可达性分析通过一系列称为**“GC Roots”的对象作为起始点,从这些对象开始向下搜索,...原创 2018-12-14 15:35:00 · 126 阅读 · 0 评论 -
深入理解Java虚拟机(学习笔记) - Day2 - 垃圾收集
常见的垃圾收集算法标记-清除算法(Mark-Sweep)首先标记出需要回收的所有对象然后在标记完成后统一回收所有被标记的对象使用该算法进行垃圾收集会产生以下问题:效率较低会产生大量内存碎片复制算法(Copying)将可用内存的容量划分为两块相等的小块每次只使用其中一块,当使用完之后就将还存活的对象复制到另一块未被使用过的内存块中,然后把已使用完毕的这块内存一次...原创 2018-12-15 16:37:47 · 1423 阅读 · 2 评论