JVM浅析

JVM探究

  • 请你谈谈你对JVM的理解?java->class->jvm
  • java8虚拟机和之前的变化更新?
  • 什么是OOM,什么是栈溢出StackOverFlowError?怎么分析?
  • JVM的常用调优参数有哪些?
  • 内存快照如何抓取,怎么分析Dump文件?知道吗?
  • 谈谈JVM中,类加载器你的认识?

JVM的位置

在这里插入图片描述

JVM的体系结构

在这里插入图片描述
在这里插入图片描述
注意:1.8后内存模型是有变化的–一定要看
最新内存模型
在这里插入图片描述

在这里插入图片描述

类加载器

作用:加载Class文件-
在这里插入图片描述
​ 1.虚拟机自带的加载器

​ 2.启动类(根)加载器

​ 3.扩展类加载器

​ 4.应用程序加载器

双亲委派机制(百度看吧)

在这里插入图片描述

沙箱安全机制

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

Native

public class Demo {
    public static void main(String[] args) {
        new Thread(()->{
            System.out.println("d");
        },"threadName").start();

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

    //Java程序驱动打印机,管理系统,掌握即可,在企业级应用中较为少见
    private native void start0();
    //调用其他接口:Socket..WebService...http
    
}

PC寄存器

在这里插入图片描述

方法区

在这里插入图片描述

栈:数据结构

在这里插入图片描述

三种JVM

在这里插入图片描述

在这里插入图片描述

新生区

在这里插入图片描述

老年区

在这里插入图片描述

永久区

在这里插入图片描述
元空间:逻辑上存在,物理上不存在
在这里插入图片描述
各个区分配比例是多少:
在这里插入图片描述

堆内存调优

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

GC:垃圾回收

在这里插入图片描述
JVM在进行GC时,并不是对着三个区域统一回收,大部分时候,回收都是新生代

  • 新生代
  • 幸存区(from,to)
  • 老年区

GC两种类:轻GC(普通的GC),重GC(全局GC)

题目:

  • JVM的内存模型和分区-详细到每个分区放什么?
  • 堆里面的区有哪些?Eden,from,to,老年区,说说他们的特点!
  • GC的算法有哪些?标记清除法,标记压缩,赋值算法,引用计数法,怎么用的?
  • 轻GC和重GC分别在什么时候发生?

常用算法

在这里插入图片描述
复制算法:
在这里插入图片描述

  • 好处:没有内存的碎片
  • 坏处:浪费了内存空间:多了一半空间永远是空to,假设对象100%存活(极端情况)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vuHOhHig-1627229831313)(JVM.assets/image-20210725234415988.png)]
标记删除算法:
在这里插入图片描述

  • 优点:不需要额外的空间!
  • 缺点:两次扫描,严重浪费时间,会产生内存碎片

标记压缩

在这里插入图片描述
标记清除压缩

先标记清除几次
在这里插入图片描述
再压缩
在这里插入图片描述

总结

在这里插入图片描述

JMM:Java Memory Model

在这里插入图片描述

  1. 百度
  2. 思维导图

单点登录-|sso


版权声明:本文为weixin_42287451原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。