JVM和JUC

       JVM和JUC的简要介绍
       在这里插入图片描述

开始~~~


JVM

JVM体系结构概览

在这里插入图片描述

类加载器

  • 类加载器一共四种

    • 虚拟机自带的三个

      • 启动类加载器
      • 扩展类加载器
      • 应用程序类加载器
    • 用户自定义类加载器

  • 双亲委派机制

    • 作用
      • 防止类的重复加载
      • 防止JDK中的类被篡改
    • 加载类的过程
      • 应用程序类加载器委派扩展类加载器,扩展类加载器委派启动类加载器
        • 如果启动类加载器加载成功,则不需要再加载
        • 没有成功的话,就向下委派直到加载成功,否则抛出ClassNotFound异常

JVM的体系结构

本地方法栈

  • 当需要执行native方法时,会将方法压入本地方法栈,此时会向操作系统发送指令,然后由执行引擎解释命令

    ,会调用本地方法接口,会用到本地方法库

  • 程序计数器(PC寄存器)

    • 小小的指针,指向了下一个将要执行的方法

方法区

  • 方法区中存放
    • 静态变量、常量、类信息、运行时常量池
  • 方法区的实现
    • JDK1.7以及之前
      • 通过永久代实现方法区,JDK1.7之前字符串常量池放到方法区中
    • JDK1.8及之后
      • 通过元空间实现方法区,JDK1.7之后字符串常量池放到堆中

  • 栈也叫栈内存,是线程私有的,生命周期随线程的生命周期,线程结束栈内存则释放
  • 栈中存放
    • 8中基本数据类型变量
    • 对象的引用变量
    • 实例方法
  • 栈在内存中以栈帧的形式存在,方法调用时遵循先进后出/后进先出的原则

  • 逻辑上的划分

    • 新生区
      • 伊甸园区
      • 幸村区
        • 幸存from区
        • 幸存to区
    • 养老区
    • 永久区/元空间
  • 物理上的划分

    • 新生区
    • 养老区
  • 创建对象的过程

    • 新new的对象会放到伊甸园区,伊甸园区的对象的存活率非常低。伊甸园快满时会触发轻量级的垃圾

      回收机制(MinorGC),MinorGC会回收伊甸园区和幸存from区,将伊甸园区的幸存者标记复制到to区,

      对于from区中的幸存者会根据年龄决定:默认情况下,年龄小于15则被标记复制到to区,大于15则被

      标记复制到养老区,然后from区与to区交换角色

    • 当养老区内存不足时会触发重量级的垃圾回收机制(MajorGC/fullGC),如果养老区无法回收内存则会

      出现OOM异常

GC

  • GC的分类

    • MinorGC

      • 用来回收永久区
    • MajorGC/FullGC

      • 重点回收养老区,偶尔会伴随新生区和养老区
    • GC的算法

      • 标记复制

        • 优点:不会产生内容碎片
        • 缺点:需要双倍空间
      • 标记清除

        • 优点:不需要双倍空间
        • 缺点:会产生内存碎片、需要停止整个应用程序、需要维护内存碎片的地址列表
      • 标记压缩

        • 优点:不需要双倍空间也不会产生内存碎片、不需要维护内存碎片的地址列表、只需要记录空闲内存的起始位置即可
        • 缺点:开销较大、需要更新新对象的地址
      • 标记清除压缩


JUC

多线程创建的方式

  • 继承Thread类
  • 实现Runnable接口
  • 使用Callable接口
    • 需要借助于中间人FutureTask
  • 使用线程池
    • 创建线程池的方式
      • 通过ExecutorService接口的实现类ThreadPoolExcutor直接new
      • 通过工厂类Executors的静态方法

Synochronized与Lock的区别

  • Synochronized不需要手动上锁和解锁,lock需要手动上锁和解锁
  • Synochronized能实现的功能lock都可以实现,而且lock比他更强大

Runnable与Callable的区别

  • Runnable没有返回值,Callable有返回值

  • Runnable没有抛异常,Callable抛出了异常

  • Synochronized能实现的功能lock都可以实现,而且lock比他更强大

Runnable与Callable的区别

  • Runnable没有返回值,Callable有返回值
  • Runnable没有抛异常,Callable抛出了异常
  • Runnable中的落地方法是run,Callable的落地方法是call

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值