我一共写了两篇博客,这一篇是为了让大家头脑清楚,哪些重要,如果谁有不懂得

https://blog.csdn.net/weixin_40078053/article/details/80546846

这是我的另一篇博客,对虚拟机有详细介绍,当然啦,满满全是干货,总结,否则看虚拟机书有砖头那么厚,看了后面的的忘了前面的。

一、运行时数据区域

 线程隔离, 线程共享

方法区(运行时常量池)、堆、虚拟机栈、本地方法栈、程序计数器

直接内存

学习虚拟机(jvm)必须知道的东西


二、hotspot虚拟机对象

    2.1 对象的创建

            1.检查 -->2.分配内存 (理解:指针碰撞空闲列表)-->3. Init   

    2.2 对象的内存布局

                知道:3块区域:对象头、实例数据和对齐填充

  2.2 对象的访问定位

            1、使用句柄访问
            2、使用直接指针访问
学习虚拟机(jvm)必须知道的东西

三、OutOfMemoryError(栈宽) 异常和StackOverflowError(栈深)
    3.1 Java堆溢出
    3.2 虚拟机栈和本地方法栈溢出
   3.3 方法区和运行时常量池溢出

四、垃圾收集

     1.判断对象存活

                4.1.1 引用计数器法

                4.1.2 可达性分析算法

    2.引用

              强引用,软引用,弱引用,虚引用

    3.Finalize方法(自救)

    4.3.1 回收方法区

        废弃常量和无用的类

    4.4.1 标记—清除算法(mark-sweep)

    4.4.2 复制算法(copying)

    4.4.3 标记整理算法(mark-compact)

    4.4.4 分代收集算法

  5.垃圾收集器

             Serial收集器,ParNew收集器Parallel Scavenge(新生收集器),Serial Old 收集器,Parallel Old 收集器,
CMS收集器(1.初始标记2.并发标记3.重新标记4.并发清除),G1收集器(初始标记,并发标记,最终标记,筛选回收)。
  

  6.内存分配与回收策略

      MinorGC:清理新生代

      MajorGC:清理老年代

      FullGC:清理整个堆空间

            4.6.1 对象优先在Eden分配

            4.6.2 大对象直接进入老年代

            4.6.3长期存活的对象将进入老年代

            4.6.4动态对象年龄判定

            4.6.4 空间分配担保



五、虚拟机类加载机制

       1.需要知道虚拟机规范规定有且只有5种情况必须立即对类进行初始化和不会导致初始化的情况。

   2.类在加载进入内存的声明周期:加载、验证、准备、解析、初始化、使用和卸载7个阶段

    5.3 类的加载器

        启动类加载器,扩展类加载器,系统类加载器

双亲委派模型:优先级:调用父类优先学习虚拟机(jvm)必须知道的东西这张图很明白吧。


六、Java内存模型与线程

            6.1内存间的交互操作

               学习虚拟机(jvm)必须知道的东西

   lock(锁定),unlock(解锁),unlock(解锁),load(载入),use(使用),assign(赋值),store(存储),write(写入)

    6.2 重排序

       重排序分成三种类型:1.编译器优化的重排序2.指令级并行的重排序3.内存系统的重排序

    6.3 对于volatile型变量的特殊规则(注意)

    6.4 对于longdouble型变量的特殊规则

    6.5 原子性、可见性和有序性

    6.6  先行发生原则1.程序次序规则 2.管程锁定规则 3.Volatile变量规则 4.线程启动规则

              5.线程终止规则 6.线程中断规则 7.对象终结规则 8.传递性

    6.7  Java线程调度:1.协同式调度   2.抢占式调度

    6.8 状态转换:

    1.新建 2.运行 3.无限期等待 4.限期等待 5.阻塞 6.结束

 七、线程安全

1、不可变  2、绝对线程安全   3、相对线程安全 4、线程兼容 5、线程对立

        7.1 线程安全的实现方法   
                1.互斥同步
                        等待可中断 , 公平锁,  锁绑定多个条件是指一个ReentrantLock对象可以同时绑定多个Condition对象
     2.非阻塞同步
                 3.无同步方案(纯代码)
        7.2锁优化
                适应性自旋、锁消除、锁粗化、轻量级锁和偏向锁

八、逃逸分析

    如果不能被其它 方法调用,就可以优化:栈上分配,同步消除,标量替换(数据可以继续分解,就称为聚合量)

        

相关文章:

  • 2021-09-21
  • 2022-01-24
  • 2021-08-27
  • 2021-05-29
  • 2022-01-24
  • 2021-12-06
  • 2022-01-08
猜你喜欢
  • 2021-11-10
  • 2022-01-11
  • 2022-12-23
  • 2021-07-05
  • 2021-08-14
  • 2021-04-28
  • 2021-10-05
相关资源
相似解决方案