jvm

作者: ThomasAAnderson | 来源:发表于2019-08-13 11:42 被阅读0次

    类加载机制

    类的生命周期:加载,链接,初始化,使用,卸载

    类加载器:(待补充)

    双亲委派模型:当类加载器试图加在某个类时,尽量将任务代理给当前加载器的父加载器去做,目的是为了避免重复加载java类型

    JVM内存结构

    jvm内存模型:

        堆(线程共享):对象

        方法区(线程共享):静态变量+常量+方法区,具体实现是matadata

        栈(线程私有):局部变量

        本地方法栈(线程私有):

        程序计数器(线程私有):

    对象分配规则

    对象优先分配在Eden区,如果Eden区没有足够的空间时,虚拟机执行一次Minor GC。 长期存活的对象进入老年代。虚拟机为每个对象定义了一个年龄计数器,如果对象经过了1次Minor GC那么对象会进入Survivor区,之后每经过一次Minor GC那么对象的年龄加1,知道达到阀值(默认15)对象进入老年 区。每次进行Minor GC时,JVM会计算Survivor区移至老年区的对象的平均大小,如果这个值大于老年区的剩余值大小则进行一次Full GC,

    内存占比:

    新生代(占1/3堆空间):伊甸园80%,幸存者20%

    老年代(占2/3堆空间):15次gc放到

    线程间通信:

        1,线程a把本地内存中更新过的共享变量刷新到主内存中去

        2,线程b去主线程读取线程a更新过的共享变量

    判断一个对象是否存活:

        引用计数法,每个对象一个引用计数器,每有个地方引用此对象,计数器就加一,引用失效减一,引用为零将会被回收

        可达性算法(引用链):(待补充)

    常见gc算法:

    标记清除算法:算法分为标记和清除两个阶段,首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象

    复制算法:将内存按容量分为相等的两份,每次使用其中一份,当这份内存用完了,就将存活的对象复制到另一块内存上面,然后吧使用过的内存清除掉

    标记-压缩算法:过程与标记清楚算法类似,区别是所有存活的对象向另一端移动,然后清理端边界以外的内存

    分代收集算法:java的堆分为新生代和老生代,不同代采用合适的算法

    jvm调优:

    就是尽量减少gc出现

    相关文章

      网友评论

        本文标题:jvm

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