JVM基础知识。

文章目录

前言

内存结构

  堆、方法区、栈、本地方法栈、程序计数器

  Native:
    Native方法会进入本地方法栈,然后调用JNI接口(本地方法接口);
    JNI:扩展Java的使用,融合不同的编程语言为Java所用–C、C++
  本地方法栈 Native Method Stack:它的具体做法是在NMS中登记native方法,在执行引擎(Excution Engine)执行的时候加载本地库(Native Libraies)
  PC寄存器 程序计数器 Program Counter Register,每个线程都有一个程序计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码(用来存储指向像一条指令的地址,也即将要执行的指令代码),在执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不计。
  方法区 Method Area,方法区是所有线程共享,所有字段和方法字节码,以及一些特殊方法,如构造函数,接口代码也在此定义,简单说,所有定义的方法的信息都保存在该区域,此区域属于共享区间;
静态变量、常量、类信息(构造方法、接口定义)、运行时的常量池存在方法区中,但是 实例变量存在堆内存中,和方法区无关。
  方法区存储:static final Class 常量池
  :栈内存,主管程序的运行,生命周期和线程同步;
  线程结束,栈内存也就释放了,对于栈来说,不存在GC问题;
  栈存储:基本类型,对象引用,实例方法
  :Heap,一个JVM只有一个堆内存,堆内存的大小是可以调节的。
  堆内存中还要细分为三个区域:
  新生代:包括Eden/from/to。
  老年代:old
  元空间(永久区):存的是java运行时的一些环境或类信息(JDK自身携带的Class对象、Interface元数据),不存在垃圾回收。关闭JVM,释放。

  类加载器:APP->EXT->BOOTSTRAP

  类加载机制–>双亲委派机制:安全
  1、类加载器收到类加载的请求
  2、将这个请求向上委托给父类加载器去完成,一直向上委托,直到启动类加载器BOOTSTAP
  3、启动类加载器检查是否能加载当前类,能加载则结束,使用当前的加载器,否则,抛出异常,通知子加载器进行加载
  4、重复3

  类加载器读取了文件后,一般会把什么东西放到堆中?
  类、方法、常量、变量、引用类型的真实对象;

GC

  JVM在进行GC时,主要针对新生代和老年代进行回收,GC包括轻GC和种GC(全局GC),轻GC针对新生代进行回收,Eden区存活下来的对象存储到to区,然后将from区的对象移到to区,from区和to交换名字,每次GC过后to区都是空的,当新生代满了之后,会进行重GC,重GC过后,新生区存活下来的对象,移动到老年区。

GC中的算法
  根可达算法:根搜索算法的基本思路就是通过一系列名为”GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。GC Roots可以是虚拟机栈(栈帧中的局部变量区,也叫做局部变量表)中引用的对象、方法区中的类静态属性引用的对象、方法区中常量引用的对象、本地方法栈中JNI(Native方法)引用的对象。
  引用计数法:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收。
  复制算法:主要针对 新生区from to
  优点:没有内存碎片;
  缺点:浪费内存空间,多了一般空间永远是空to
  标记清除算法:(针对老年代) 扫描并标记在使用的对象,扫描并清除未标记的对象
  优点:不需要额外的空间;
  缺点:多次扫描耗费时间,存在内存碎片
  标记压缩算法:(针对老年代) 扫描并标记在使用的对象,将上一轮存活对象压缩到内存的一端,之后清理边界。
  优点:不需要额外的空间,不存在内存碎片;
  缺点:多次扫描耗费时间

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值