jvm

作者: 闻乐 | 来源:发表于2022-06-25 15:42 被阅读0次

    new出来的对象通常放在堆中

    栈中一般放局部变量(线程栈)

    一个方法对应一块栈帧内存区域。不同的方法栈帧内存隔开

    栈FILO 先进后出

    //反汇编

    javap  -c Math.class >math.txt 

    栈(线程) 线程信息,栈帧

    堆:new的对象

    本地方法区:存储调用c/c++的那些方法引用地址

    方法区(元空间):静态变量,常量,类信息

    程序计数器:引用计数,主要存地址的

    堆由老年代和年轻代组成,老年代占2/3,年轻代占1/3

    年轻代又分为伊甸园区和s1,s2,大致为8:1:1

    分代年龄存在object对象头里面

    jvm调优arthas

    jad反编译代码

    老年代满了做fullgc,如果再放不下,则报oom

    STW:stop the world

    jvm调优的目的就是减少fullgc

    因为当进行fullgc时,jvm会停掉所有的用户线程,专心去干收集的事,对用户来说就会卡顿

    minorgc 也会STW,只是minorgc的时间很短,fullgc的时间很长

    如何找到垃圾对象?

    1.引用计数法

    2.可达性分析算法

    java用的事第二种,python用的第一种

    因为引用计数法无法处理循环依赖

    垃圾回收算法

    标记清除算法

    会产生碎片,导致后期空间利用率不高

    2.复制算法

    复制算法

    没有碎片,浪费空间

    比如内存4个g,会分为两部分,只是用其中一部分,另一部分用作垃圾回收

    3.标记整理

    垃圾收集器

    以前是分代模型,现在是分区模型

    jvm调优主要是对堆内存以及方法区调优

    java1.1早期版SerialGc 单线程手机

    Java1.8默认是ps 和po

    ParNew + CMS 

    CMS是为了解决STW时间过长的问题

    ParNew是 ps的升级版

    相关文章

      网友评论

          本文标题:jvm

          本文链接:https://www.haomeiwen.com/subject/pquivrtx.html