JVM基础概述(一)

JVM简介

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

JVM 体系架构

image-20210223145233232

JVM的实现原理

  1. 类装载器(ClassLoader)主要负责加载class文件,是否能执行主要取决于(执行引擎)execution engine它是负责执行被加载类中包含的指令。有两种类加载器分别为启动类加载器和用户自定义类加载器,然而启动类加载器是JVM实现的一部分,用户自定义类加载器是Java程序一部分。

    image-20210223145840705

    • 虚拟机自带加载器

    • 启动类(根)加载器 (BOOT)

    • 扩展类加载器(ExtClassLoader)

    • 应用程序(系统类)加载器(AppClassLoader)

      此时就有一个双亲委派机制

      //双亲委派机制->保证安全

      APP->EXC->BOOT(最终执行)

      流程:

      • 类加载器收到类加载的请求

      • 将这个请求向上委托给父类加载器去完成,一直向上委托,直到启动类加载器

      • 启动类加载器监测是否能够加载当前这个类,能加载就结束,否则,抛出异常,通知子类加载器去执行加载

      • 重复上

        image-20210223151221130

  2. 本地方法栈(native method stack)主要作用是登记native方法,然后在execution engine执行的时候加载本地方法库。

  3. 栈(Stack)又叫栈内存,负责Java程序的运行,它是在线程创建时创建的,所以生命周期也是和线程生命周期一致,同时消亡,线程结束了栈也就释放,特别提醒的是栈不存在垃圾回收的问题,因为线程结束栈就是释放了。平时我们写的类变量、引用类型变量、实例方法等等都是在函数的栈内存分配好。

image-20210223144230832

  1. 程序计数器(Program Counter Register),是指方法区中的方法字节码由引擎读取下一条指令,它是一个非常小的内存空间。为什么有这种东西呢,大家都知道每个线程都是有一个程序计数器的,是线程私有的,相当一个指针。

  2. 方法区(Method Area)它是指线程共享的,谁都可以共享使用,我们通常用来保存装载类的元结构信息。

    image-20210223144905521

  3. 堆(heap)它是Java虚拟机用来存储对象实例的,比我们在开发过程使用的new对象,只要通过new创建的对象的内存的对象都在堆分配,注意一点的是堆中的对象内存需要等待垃圾器(GC)进行回收,也是Java虚拟机共享区。

  4. 本地接口(native interface)作用是融合不同的编程语言为Java所用,注意底层是C、C++写的,这个方法的行为就是native method stack中登记native方法,然后在execution engine执行时加载native libraries的。一般有native的java方法 是java已经无法处理了 而去调用底层的C去操作。

    image-20210223151707278

    GC垃圾回收

    GC首先要知道GC的作用域是在方法区(method area)和堆(heap)的GC垃圾回收它是Java核心技术,它是怎么实现的呢,主要通过确定对象引用来判断是否收集该对象,我们平时常用的方法引用计数和对象引用便利两种方法的,GC收集的算法后续更新。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值