ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

jvm

2022-05-13 01:00:07  阅读:158  来源: 互联网

标签:JVM 标记 算法 内存 jvm 压缩算法 加载


JVM虚拟机

  1. JVM的位置

    image-20220426164745687

  2. JVM的体系结构

    image-20220426165241344

  3. 类加载器

    image-20220427142629416

    • 虚拟机自带的加载器

    • 启动类(根)加载器

    • 扩展类加载器

    • 应用(系统类)程序加载器

  4. Native

    //native:凡是带了native关键字的,说明java的作用范围达不到,会去调用底层c语言的库
    //会进入本地方法栈
    //调用本地方法本地接口 JNI接口
    //JNI:扩展java 的使用,融合不同的编程语言为java使用,最初是:c c++
    //java诞生的时候c,c++横行,想要立足,必须要有调用c c++的程序
    //它在内存区域中专门开辟了一块标记区域:native method stack
    //在最终执行的时候,加载本地方法库中的方法通过JNI接口
    //调用其他接口:
    
  5. 方法区

    • 静态变量、常量、类信息(构造方法,接口定义)、运行时的常量池存在方法区中,但是实例遍历存在堆内存中和方法区无关(static、final、class、常量池)
  6. 栈:数据结构

    • 程序= 数据结构+算法

    • 先进后出,后进先出

    • 队列:先进先出(FIFO:First Input First Output)

    • main()先执行,最后结束

    • 栈内存,主管程序的运行,生命周期和线程同步。线程结束,栈内存也就是释放,对于栈来说,不存在垃圾回收问题。一旦线程结束,栈就over

    • 存储8大基本类型 + 对象引用 + 实例的方法

    • 栈满了:抛出stackoverflowerror

  7. Heap:一个JVM只有一个堆内存,堆内存的大小是可以调节的

    类加载器读取类文件后。会把:常量、类、方法、变量,保存所有引用类型的真实数据

    堆内存分为三个区:

    • 新生区(伊甸园区) Young
      • 类:诞生和成长的地方,或者死亡
      • 所有的对象都是在伊甸园区new出来的
      • 幸存者(0、1)
    • 养老区 Old :当一个对象经历了15次GC后,就会进入养老区
    • 永久区

    GC 垃圾回收,主要是在伊甸园区和养老区

    OOM:堆内存不够 outofmemory

    JDK8以后:养老区 = 元空间

    99%的对象都是临时对象

  8. 永久区

    • 这个区域常驻内存,用来存放JDK的Class对象,interface元数据,存储的是Java运行时的环境或类信息,不存在垃圾回收,关闭JVM就会释放
  9. GC常用算法

    • 引用算法

      image-20220428214007344

    • 复制算法

      谁空谁是to

      image-20220428212822280

      • 好处:没有内存的碎片
      • 坏处:浪费了内存空间,对一般空间永远是空to区,假设对象100%存活
      • 复制算法最佳使用场景:对象存活度比较低的时候-->新生区
    • 标记清除算法

      image-20220428213344636

      • 优点:不需要额外的空间

      • 缺点:两次扫描,严重浪费时间,会产生内存碎片

    • 标记压缩算法

      image-20220428215201252

    • 标记清除压缩算法

      先标记几次

      image-20220428215300353

      再压缩

image-20220428215407177

总结

  • 内存效率:复制算法>标记清除算法>标记压缩算法>(时间复杂度)
  • 内存整齐度:复制算法= 标记压缩算法>标记清除算法
  • 内存利用率:标记压缩算法 = 标记清除算法 >复制算法

标签:JVM,标记,算法,内存,jvm,压缩算法,加载
来源: https://www.cnblogs.com/lobort/p/16265176.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有