此篇文章属于作者初识之后的概述总结,谈论的层面很浅,大佬勿喷。

目录

  • 类加载器
  • 内存管理器(垃圾回收器)
  • 执行引擎

JVM全称是Java Virtual Machine,意为java虚拟机,所以要了解什么是JVM我们应该先了解什么是虚拟机。
虚拟机指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整的的计算机系统。

虚拟机模拟为什么要模拟一个计算机系统?因为这样做就可以让java程序员不用太多的关注底层操作系统和计算机组成方面的东西,我们编写出的代码在jvm之上运行,这大大减小了java程序员的负担,可以让我们把更多的精力放在代码层面。

在上面虚拟机的概念中提到了虚拟机是通过软件模拟的,既然虚拟机本质也是一个软件,那么这个进程在OS看起来和其他进程比无差别,所以我们可以大概想到这样一个模型来明白jvm属于什么层面:

对jvm有了大的了解之后我们再来谈一谈jvm的具体作用。
可以先看一下上一篇文章对编译和运行有个大概的了解:

java源文件(文件名.java),字节码文件(文件名.class),编译和运行

类加载器

Java程序员写好代码要运行的时候编译器会先将*.java源码文件编译成*.class字节码文件(类文件),字节码文件主要包含了“指令”和“指令”要处理的数据。此时字节码文件还是放在硬盘中,大家都知道我们计算机是建立在冯诺依曼体系之上的,所以CPU只能和内存交互,也就是此时程序还没有被加载到内存中可以认为还没有开始运行,此时jvm中有这样一个“部件”——类加载器将硬盘上的字节码文件加载到内存中,到这里我们的代码算是真正开始运行了。
对类加载器做一个总结:jvm中的类加载器的作用就是把字节码文件加载到内存中。

内存管理器(垃圾回收器)

字节码文件被加载到内存中,这里的内存是我们广义上所说的内存,但同时抽象地看,这一块内存是jvm在启动时OS分配的内存,在细化地说,是jvm的另一个“部件”——内存管理器(Memory Manager)MM 或者通常说的垃圾回收器(Garbage Collector)GC 给我们的程序所分配的内存,说到这里就不得不说一下jvm运行时内存分区

总结一下内存管理器:内存管理器又叫垃圾回收器,一个APP运行时会需要内存的申请和释放,而这时jvm内的这个垃圾回收器会做内存的分配和回收。即jvm运行时内存中实时变化的动态内存都是它管理的。

执行引擎

一个程序最终是在CPU上面运行的,但是在源码被编译为的字节码是不能被CPU所能识别和运行的,此时jvm的一个“部件”——执行引擎(Excute Engine)会把字节码翻译为CPU认识的指令。


以上就把jvm内部的三个大的部件做了一个简单的介绍,下面放上jvm的图方便大家有一个更深的理解

补充一下上图的本地方法是什么

一. 什么是Native Method
简单地讲,一个Native Method就是一个java调用非java代码的接口。一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C。这个特征并非java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调用一个C的函数。

什么是JVM?JVM概述——初识JVM(类加载器,垃圾回收器,执行引擎)相关推荐

  1. JVM专题(2)-类加载器子系统

    目前博主个人博客已经搭建发布,后期相关文章也会发布在上面,大家有兴趣可以去上面学习,点击即可前往文青乐园 1.内存结构概述 假设我们想自己手写一个Java虚拟机的话,必须考虑以下结构: 类加载器 执行 ...

  2. JVM虚拟机详解(三)类加载器的分类

    JVM虚拟机详解(三)类加载器的分类 1. 类加载器概述 JVM严格来讲支持两种类型的类加载器 .分别为引导类加载器(Bootstrap ClassLoader)和自定义类加载器(User-Defin ...

  3. 从头开始学习->JVM(三):类加载器(上)

    前言 我们现在都知道了,JVM是java这门语言的基础,是java这门语言得以发扬光大的基础,是java程序运行的平台,是实现java特性的一个必要前提. 但是,JVM是具体做了什么工作呢?对于这个问 ...

  4. 80070583类不存在_结合JVM源码谈Java类加载器

    一.前言 之前文章 加多:ClassLoader解惑​zhuanlan.zhihu.com 从Java层面讲解了Java类加载器的原理,这里我们结合JVM源码在稍微深入讲解下. 二.Java类加载器的 ...

  5. 深入理解JVM(1):类加载器

    文章目录 一.类加载简介 1.简介 2.Java虚拟机与程序的生命周期 3.类的加载.连接与初始化(类加载的最重要的3个阶段) 3.1加载 3.2连接 3.3 初始化 4.类的使用和卸载(类加载的剩余 ...

  6. JVM源码分析--ClassLoader类加载器

    本人原创,转载请注明出处:https://www.cnblogs.com/javallh/p/10224187.html 1.JDK已有类加载器: BootStrap ClassLoader (启动类 ...

  7. JVM初学之类java的类加载器和双亲委派模型

    类加载器: 定义:java类加载器用于对java类的加载,java有自带的类加载器,也可以自定义类加载器实现定制化,类似于tomcat. java自带了三个系统的类加载器:如下图: 双亲委派模型: 背 ...

  8. JAVA类加载对字节码的处理_深入理解Java虚拟机(类文件结构+类加载机制+字节码执行引擎)...

    [本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 周志明的< ...

  9. jvm性能调优 - 18白话G1垃圾回收器的工作原理

    文章目录 ParNew + CMS的组合的痛点 G1垃圾回收器 G1是如何做到对垃圾回收导致的系统停顿可控的? Region可能属于新生代也可能属于老年代 总结 ParNew + CMS的组合的痛点 ...

最新文章

  1. 石川es6课程---8、字符串
  2. 让你觉得破坏了封装性的扩展方法
  3. 我和2035年有个约计算机论文,我和2035有个约
  4. pc企业微信hook接口,企业微信营销软件,企业微信群发
  5. Vin码车架号识别技术已经很成熟了
  6. 暗6 雷电三接口突然失效解决办法
  7. 趋势判研:基于Web3.0的智能生态体——保险科技生态建设...
  8. 负数(一):猎人的过冬“法宝”
  9. 不给移动一分钱!10个免费发短信的国外站点
  10. 常微分方程的差分方法C语言,常微分方程差分方法.ppt
  11. mysql为什么尽量不要存null
  12. 【信息安全】RSA非对称加密算法原理(详解和C++代码实现)
  13. SVN教程——02TortoiseSVN的使用
  14. 结对编程项目-四则运算整体总结
  15. cos66度等于多少度 用计算机怎么算,三角函数值表(三角函数计算方法及快速查询表)...
  16. python泰坦尼克号案例分析_Python机器学习案例-泰坦尼克之灾
  17. Wireless Networking in the Developing World (Second Edition)
  18. 威纶通触摸屏的配方功能具体使用方法介绍(宏指令写入PLC)
  19. 5 款非常好用的 Docker 工具
  20. 切比雪夫逼近法设计FIR滤波器

热门文章

  1. SAP链接外部数据库的实现方法
  2. 深度可分离卷积Depthwise Separable Convolution
  3. 如何确定图片名未改变 php,这里未改变的是数据库中默认的数据,比如修改时间?,还有发布用户名?...
  4. 7-55 列车调度 (25 分)
  5. 7-5 统计大写辅音字母 (15 分)
  6. 查看计算机上隐藏用户,隐藏或显示 InetOrgPerson 对象类 - Windows Server | Microsoft Docs...
  7. 算法分析之对问题建模
  8. php操作MySQL数据库的方法和解析
  9. auto的作用c语言,auto指的是什么意思
  10. MapReduce案例一:天气温度