JVM快速入门

JVM的位置

在这里插入图片描述

JVM的体系结构

  • 程序计数器即PC寄存器

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

类加载器及双亲委派机制

在这里插入图片描述

  • 作用:加载class文件。
  • 级别:
    • 1、虚拟机自带的加载器
    • 2、启动类(根)加载器(rt-jar)
    • 3、扩展类加载器(jre目录下–lib–ext)
    • 4、应用程序加载器(AppClassLoader)
  • 双亲委派机制
    • 1、类加载器收到类加载的请求
    • 2、先将这个请求向上委托给父类加载器去完成,一直向上委托,直到根加载器
    • 3、启动类加载器检查是否能够加载当前类,能加载就结束,使用当前加载器,否则,抛出异常,通知子加载器进行加载
    • 4、重复步骤3
      • 注意:往上调用会遇到null,代表java调用不到,底层是用C/C++来写的;
      • native关键字:修饰方法即为本地方法,代码构成为C/C++(例如线程相关方法,java处理不了线程,用C/C++进行方法编写,用native关键字修饰。)
      • java为什么叫C++ --:对C++语言中指针、内存管理进行升级优化而来。

沙箱安全机制

  • 安全管理、权限控制

native、方法区

  • 凡是带了native关键字的,说明java的作用范围达不到了,会去调用底层C语言的库。
  • 会进入本地方法栈,登记native方法。
  • 真正执行的时候,通过本地方法接口(JNI)执行。
    • 产生原因:java诞生之初C/C++横行,想要立足,必须要有调用C/C++的程序。
    • 作用:扩展Java的使用,融合不同的编程语言为java使用。以及操作硬件。
    • 例如java程序驱动打印机,管理系统,native在企业开发中较为少见。
  • 方法区存放:static(静态变量)、final(常量)、Class(类信息)、常量池

  • 本质是:数据结构;
  • 程序=算法+数据结构;(非框架+业务逻辑)
  • 栈:先进后出,后进先出;队列:先进先出(FIFO),喝多了吐就是栈,吃多了拉就是队列。
  • 栈内存主管程序的运行,生命周期和线程同步。线程结束,栈内存也即释放,对于栈来说,不存在垃圾回收的问题,一旦线程结束,栈也就结束了。
  • 栈内存放:8大基本类型+对象引用+实例的方法。

  • Heap:一个JVM只有一个堆内存,堆内存的大小是可以调节的。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述元空间:逻辑上存在,物理上不存在。

使用JProfiler工具分析OOM原因

在这里插入图片描述

GC算法

  • 引用计数法
  • 复制算法
    • 好处:没有内存碎片
    • 坏处:浪费部分内存空间,to区永远为空;
    • 最佳使用场景:对象存活度较低的区域。
      在这里插入图片描述
  • 标记清除算法
  • 标记压缩算法
  • 总结:
    • 内存效率:复制算法>标记清除算法>标记压缩算法
    • 内存整齐度:复制算法= 标记压缩算法 > 标记清除算法
    • 内存利用率:标记压缩算法>标记清除算法>复制算法
  • GC分代收集算法:
    • 年轻代(存活率低):复制算法
    • 老年代(区域大,存活率高):标记清除+标记压缩混合实现

JMM

  • JAVA Memory Model(JAVA内存模型)
  • 作用:jvm对应于物理机,jmm对应于缓存一致性协议,用于定义数据读写的规则。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章