JVM 学习路线

JVM

JVM简略结构

在这里插入图片描述

JVM思维导图

在这里插入图片描述

类加载器

在这里插入图片描述

  • 类加载实例
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

类加载过程

在这里插入图片描述

双亲委派机制

在这里插入图片描述
在这里插入图片描述

  • 类加载步骤
    在这里插入图片描述
沙箱安全机制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

StackOverflowError
public class Test{
    public static void main(String[]args){
        new Test().a();
    }
    
    public void a(){
        b();
    }
    
    public void b(){
        a();
    }
}

Native

在这里插入图片描述

PC寄存器

在这里插入图片描述

方法区

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

堆的结构

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

OOM(OutOfMemoryError:Java heap space

在这里插入图片描述

处理OOM:
1.尝试扩大堆内存看结果 (-Xms1m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError)
2.分析内存,看一下那个地方出现了问题。

在这里插入图片描述

JDK1.8以后Heap
在这里插入图片描述
在这里插入图片描述

新生区

在这里插入图片描述

老年区
  • 新生期杀不死的东西
永久代

在这里插入图片描述
在这里插入图片描述

public class Main{
    public static void main(String[]args){
        //返回虚拟机试图使用的最大内存
        long max = Runtime.getRuntime().maxMemory();//字节
        //返回Jvm的初始化总内存
        long total = Runtime.getRuntime().totalMemory();

        System.out.println("max = "+ max +"字节\t" + (max/(double)1024/1024) + "MB");
        System.out.println("total = "+ total +"字节\t" + (total/(double)1024/1024) + "MB");
    }
    //-Xms1024m -Xmx1024m -XX:+PrintGCDetails
    //初始 和 最大
    //默认情况下: 分配的总内存是电脑内存的1/4,而初始化的内存: 1/64.
}
  • 运行结果
    在这里插入图片描述

  • GC

    • 轻GC(GC)
    • 重GC(Full GC)

GC

在这里插入图片描述
在这里插入图片描述

引用计数法

在这里插入图片描述

复制算法 (主要用在新生区)
  • 幸存from 幸存 to (谁空谁是to)
    在这里插入图片描述
from -> to

在这里插入图片描述

  • 好处: 没有内存的碎片
  • 坏处:浪费了内存空间:多了一半空间永远是空 to。假设对象100%存活(极端情况)

复制算法最佳使用场景:对象存活度较低的时候:新生区.

标记压缩清除算法

在这里插入图片描述

  • 优点:不需要额外的空间
  • 缺点:两次扫描,严重浪费时间,会产生内存碎片。
标记压缩算法

在这里插入图片描述

总结

内存效率:复制算法>标记清除算法>标记压缩算法(时间复杂度)

内存整齐度:复制算法=标记压缩算法>标记清除算法

内存利用率:标记压缩算法=标记清除算法>复制算法

年轻代:

  • 存活率低
  • 复制算法

老年代:

  • 区域大:存活率高
  • 标记清除(内存碎片不是太多)+标记清除压缩混合实现

最优算法?

没有,没有最好的算法,只有最合适的算法--------->GC:分代收集算法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值