jvm入门笔记(b站狂神)

jvm体系结构

工具用的procsson,里面其实有很多jvm模板
在这里插入图片描述

类加载器

  • 作用:加载Class文件
    在这里插入图片描述
  • 加载器的类别:虚拟机自带的加载器,启动类(根)加载器,扩展类加载器,应用程序加载器(rt.jar)
  • 双亲委派机制:AppClassLoader(应用程序加载器)->ExtClassLoder(扩展类)->BootStrapClassLoader(启动类加载器)
  • 这样做的好处在于保证安全,防止程序员写出和核心jar包中一摸一样的类时,从而覆盖了核心jar包中的类(向上委派,向下加载)
  • 具体步骤:1.类加载器收到类加载请求2.将这个请求向上委托父类加载器,一直向上委托,直到启动类加载器3.启动类能加载当前类,则使用当前类加载器,否则,抛出异常,通知子类加载

沙箱

  • 将代码归入保护域,确定了代码可以进行哪些操作

native

  • native关键字方法说明Java得作用范围达不到了,会去调用底层c语言的库,会进入本地方法栈,调用本地方法接口(JNI)
  • JNI:扩展java的使用,融合不同的编程语言,它在内存空间中专门开辟标记区域:Native Method Stack,登记native方法,在最终执行的时候,通过JNI加载本地方法库中的方法
  • 作用:Java程序打印机,管理系统

方法区

  • 所有定义的方法都保存在该区域当中,属于共享区间,静态变量,常量,类信息(构造方法,接口定义),运行时的常量池存放在方法区中,但是实例变量存在堆内存中,和方法区无关

  • 是一种数据结构,先进后出,主管程序的运行,生命周期和线程同步,线程结束,栈内存就释放了,对于栈来说,不存在垃圾回收问题
  • 8大基本类型,对象引用,实例的方法

  • 一个JVM只有一个堆,堆内存大小可以调解,存放引用类型的值
  • 分为三个区域:新生区,养老区,永久区
  • GC垃圾回收:主要是在伊甸园区,养老区
  • JDK8以后,永久存储区叫元空间
    新生区:
  • 一个实例诞生和成长的地方,甚至死亡
  • 伊甸园区:所有的对象都是在伊甸园区new出来的
  • 幸村区(0,1)
    (讲得太乱了,看书吧)

MAT,Jprofier作用

  • 分析Dump内存文件,快速定位内存泄漏
  • 获取堆中数据
  • 获取大的对象
  • -Xms 设置初始化内存分配大小 1/64
  • -Xmx 设置最大分配内存,默认1/4
  • -XX:+printGCDetails 打印垃圾回收机制
  • -XX:+HeapDumpOnOutOfMemoryError //oom DUMP

GC:垃圾回收

  • GC类型:轻GC(普通GC),重GC (全局GC)
  • 算法:复制算法,标记清除算法,标记清楚压缩算法
  • 内存效率:复制算法>标记清除算法>标记压缩算法(时间复杂度)
  • 内存整齐度:复制算法=标记清除算法>标记压缩算法
  • 内存利用率:标记压缩算法=标记清除算法>复制算法
  • GC:分代搜集算法
  • 年轻代:存活率低,复制算法
  • 老年代:存活率高,标记清除+标记压缩混合

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