全国服务热线:400-035-8011

位置:大同IT培训学校 > 学校动态 > Java虚拟机Jvm基础知识介绍

Java虚拟机Jvm基础知识介绍

来源:大同IT培训学校时间:2020/10/23 17:03:53

    jvm的内存模型
    并发问题的根源:可见性,原子性,乱序执行
    java内存模型定义了一些规则来禁止cpu缓存和编译器优化,happen-before用来描述两个操作的内存的可见性,有以下6条
    1.程序的顺序执行,个语句对后一个语句可见(当两个语句没有依赖的情况下还是可以乱序执行)
    2.volatile变量的写对另一个线程的读可见
    3.happen-before具有传递性
    4.一个线程对锁的释放对另外一个线程的获取锁可见(也就是一个线程在释放锁之前对共享变量的操作,另外一个线程获取锁后会看的到)
    5.线程a调用了线程b的start()方法,那么线程a在调用start方法之前的操作,对线程b内的run()方法可见

    6.线程a调用了线程b的join方法,那么线程b里的所有操作,将对线程a调用join之后的操作可见。

大同Java培训课程

    jvm的垃圾回收
    两种实现:引用计数和可达性分析,引用计数会出现循环引用的问题,目般采用可达性分析。
    为了增加程序运行线程和垃圾回收线程不会发生并发影响,jvm采用安全点机制来实现stoptheworld,也就是当垃圾收集线程发起stoptheworld请求后,工作线程开始进行安全点检测,只有当所有线程都进入安全点之后,垃圾收集线程才开始工作,在垃圾收集线程工作过程中,工作线程每执行一行代码都会进行安全点检测,如果这行代码安全就继续执行,如果这行代码不安全就将该线程挂起,这样可以增加垃圾收集线程运行过程中,工作线程也可以继续执行。
    安全点:例如阻塞线程肯定是安全点,运行的jni线程如果不访问java对象也是安全的,如果线程正在编译生成机器码那他也是安全的,Java虚拟机在有垃圾回收线程执行期间,每执行一个字节码都会进行安全检测。
    基础垃圾收集算法:清除算法会造成垃圾碎片,清除后整理压缩浪费cpu耗时,复制算法浪费内存。
    基础假设:大部分的java对象只存活了一小段时间,只有少部分java对象存活很久。新建的对象放到新生代,当经过多次垃圾回收还存在的,就把它移动到老年代。针对不同的区域采用不同的算法。因为新生代的对象存活周期很短,经常需要垃圾回收,所以需要采用速度快的算法,也就是复制,所以新生代会分成两块。一块eden区,两块大小相同的survivor区。
    新的对象默认在eden区进行分配,由于堆空间是共享的,所以分配内存需要加锁同步,不然会出现两个对象指向同一块内存,为了避免频繁的加锁,一个线程可以申请一块连续内存,后续内存的分配就在这里进行,这个方案称为tlab。tlab里面维护两个指针,一个是当前空余内存起始位置,另外一个tail指向尾巴申请的内存结束位置,分配内存的时候只需要进行指针加法并判断是否大于tail,如果超过则需要重新申请tlab。
    如果eden区满了则会进行一次minor Gc,将eden区的存活对象和from区的对象移动到to区,然后交换from和to的指针。
    垃圾收集器的分类:针对的区域,老年代还是新生代,串行还是并行,采用的算法分类复制还是标记整理
    g1基于可控的停顿时间,增加吞吐量,取代cms g1将内存分为多个块,每个块都可能是eden survivor old三种之一首先清除全是垃圾的快这样可以释放内存。
领取试听课
每天限量名额,先到先得

尊重原创文章,转载请注明出处与链接:http://www.peixun360.com/2335/news/269538/违者必究! 以上就是大同IT培训学校 小编为您整理 Java虚拟机Jvm基础知识介绍的全部内容。

温馨提示:提交留言后老师会第一时间与您联系!热线电话:400-035-8011