当前位置: 首页>编程语言>正文

java jvm机制 jvm juc

       JVM和JUC的简要介绍

       

java jvm机制 jvm juc,java jvm机制 jvm juc_大数据,第1张

开始~~~


JVM

JVM体系结构概览

java jvm机制 jvm juc,java jvm机制 jvm juc_大数据_02,第2张

类加载器

  • 类加载器一共四种
  • 虚拟机自带的三个
  • 启动类加载器
  • 扩展类加载器
  • 应用程序类加载器
  • 用户自定义类加载器
  • 双亲委派机制
  • 作用
  • 防止类的重复加载
  • 防止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

java jvm机制 jvm juc,java jvm机制 jvm juc_类加载器_03,第3张


       JVM和JUC的简要介绍

       

java jvm机制 jvm juc,java jvm机制 jvm juc_大数据,第1张

开始~~~


JVM

JVM体系结构概览

java jvm机制 jvm juc,java jvm机制 jvm juc_大数据_02,第2张

类加载器

  • 类加载器一共四种
  • 虚拟机自带的三个
  • 启动类加载器
  • 扩展类加载器
  • 应用程序类加载器
  • 用户自定义类加载器
  • 双亲委派机制
  • 作用
  • 防止类的重复加载
  • 防止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

java jvm机制 jvm juc,java jvm机制 jvm juc_类加载器_03,第3张



https://www.xamrdz.com/lan/5j61924478.html

相关文章: