jvm的大致流程:他把一个Class文件 通过类加载机制 装载到jvm里面,然后放到不同的运行时数据区(Runtime Data Areas),通过编译器来编译。

第一部分,我们可以关注class文件的格式,比如说其中的常量池,成员变量,方法等等。这样就能够知道java源码内容在class文件中的表示方式。

第二部分,是Class Loader Subsystem,也就是类加载机制,class文件加载到内存中,需要借助java中的类加载机制。类加载机制呢,分为装载、链接和初始化,它主要就是对类进行查找、验证以及分配相关内存空间和赋值。

第三部分,Runtime Data Areas也就是我们通常所说的运行时数据区,他解决的问题是class文件进入内存之后,该如何进行存储不同的数据,以及数据该如何进行扭转。比如1. Method Area 通常会存储由class文件常量池所对应的运行时常量池、字段和方法的元数据信息、类的模板信息等等。2. Heap 是存储各种Java中的对象实例。3. Java Threads 通过线程以栈的方式去运行加载各个方法。3. Native Internal Thread 可以理解为是加载运行 native 类型的方法。4. PC Registers(Program Counter)呢 则是保存每个线程执行方法的实时地址,这样通过运行时数据区的五个部分就能很好的去把数据存储和运行起来。

第四部分,Garbage Collector是我们的垃圾回收器,就是对运行时数据区中的数据进行管理和回收。回收机制可以基于不同的垃圾收集器,比如说 Serial、Parallel、CMS、G1、ZGC等。可以针对不同业务场景去选择不同的收集器,只需要通过jvm 参数设置即可。如果我们去打开,Hotspot的一个源码,可以发现这些收集器,其实就是对于不同垃圾收集算法的实现,核心的算法呢有三个,第一个是标记-清除,第二个是标记-整理,第三个是复制。

第五部分, JIT Compiler 和 Interpreter通俗的理解就是编译器。Class的字节码指令通过JIT Compiler 和 Interpreter翻译成对应操作系统的CPU指令,只不过呢,可以选择解释执行或者编译执行。在HotSpot的虚拟机中,默认采用的是这两种方式的组合。

第六部分,是JNI的技术,如果我们想去找到Java中的某个native方法,是如何通过C或C++实现的,那么可以通过,Native、Method、Interface来去进行查找,也就是我们所谓的JNI技术。通过官网给出的HotSpot架构图,我们就能够知道jvm的底层是如何运行的。当然在实际的操作过程中,我们可以去借助一些jvm的参数和一些jdk常见命令,我们就可以优雅的分析jvm出现的常见问题并对其进行优雅的调优。

最新文章

  1. 【转载】latch: cache buffers chains
  2. Spring @Autowired注解在utils静态工具类
  3. pandas筛选0,3,6开头的行
  4. VC6.0到VS2013全部版本下载地址
  5. php连接ftp
  6. C#基础精华04(文件流,文件操作,File、Directory、Path,Directory)
  7. -_-#【Dom Ready / Dom Load】
  8. maven常用插件配置
  9. ASP.NET中Get和Post的用法
  10. js运动动画
  11. HBase应用快速学习
  12. java中构造方法和this,static关键字
  13. [转]python单元测试unittest
  14. Python之旅.第四章.模块与包.总结(未完待遇)
  15. 解读 IoC 框架 InversifyJS
  16. nodejs的某些api~(二)crypto加密模块
  17. C# AutoResetEvent 使用整理
  18. .net中文分词 jieba.NET
  19. Build Laravel Blog PigJian by PHP7 and Nginx on Ubuntu
  20. 3ds Max 中的导航控件SteeringWheels入门介绍

热门文章

  1. ATC:一个能将主流开源框架模型转换为昇腾模型的神奇工具
  2. wwise 音频引擎介绍
  3. Linux新手渣渣上路史
  4. centos7 安装MariaDB数据库
  5. 关于winform 调用本地html页面路径不正确问题
  6. Android 添加shape, selector等资源文件
  7. python GIL解释器
  8. call, apply,bind的区别与用法
  9. VMvare虚拟机的安装及新建虚拟机(一)
  10. shell脚本:报错syntax error near unexpected token `$'\r''解决方法