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出现的常见问题并对其进行优雅的调优。

J V M大概理解的更多相关文章

  1. 关于Mysql数据库longblob格式数据的插入com.mysql.jdbc.PreparedStatement.setBinaryStream(ILjava/io/InputStream;J)V问题分析

    当数据库字段为blob类型时 ,我们如果使用PreparedStatement中的setBinaryStream(int,InputStream,int)方法需要注意 在向blob字段类型中插入数据时 ...

  2. Javascript J更深层次的理解avascript 基础知识

    eval全局函数 dojo loader会看到如下的功能    var eval_ = new Function('return eval(arguments[0]);'); //Function 函 ...

  3. 对仿真glbl.v文件的理解

    Simulation, UniSim, SimPrim - How do I use the "glbl.v" module in a Verilog simulation? De ...

  4. jQuery.each的function中有哪些参数(可以大概理解function中的参数问题)

    1.没有参数 $("img").each(function(){ $(this).toggleClass("example"); }); 1 2 3 2.有一个 ...

  5. docker大概理解

    #是啥# 轻量级的虚拟机,占用资源远小于一般意义上的虚拟机(例如:vmware,hyper-v) #特点# 启动快,体积小,开销少 #本质# Linux容器的一种封装 参考: 阮一峰博客 http:/ ...

  6. 一步一步深入理解Dijkstra算法

    先简单介绍一下最短路径: 最短路径是啥?就是一个带边值的图中从某一个顶点到另外一个顶点的最短路径. 官方定义:对于内网图而言,最短路径是指两顶点之间经过的边上权值之和最小的路径. 并且我们称路径上的第 ...

  7. 全面理解Git

    前言 人生贵知心,定交无暮早. 原文博客地址:Git命令总结 知乎专栏&&简书专题:前端进击者(知乎)  前端进击者(简书) 正文 1.Git简介 Git的诞生确实是一个有趣的故事,我 ...

  8. Unity Animator动画状态机 深入理解(一)

    接触Unity以来就已经有了Animator,Animation用的少,不过也大概理解他俩之间的一个区别于联系. 图中其实就是Animator和Animation之间的区别于联系了,啊!你肯定会告诉我 ...

  9. Sql Server之旅——第六站 使用winHex利器加深理解数据页

    这篇我来介绍一个winhex利器,这个工具网上有介绍,用途大着呢,可以用来玩数据修复,恢复删除文件等等....它能够将一个file解析成 hex形式,这样你就可以对hex进行修改,然后你就可以看到修复 ...

  10. (5) 深入理解Java Class文件格式(四)

    转载:http://blog.csdn.net/zhangjg_blog/article/details/21658415 前情回顾   在上一篇博客深入理解Java Class文件格式(三) 中, ...

随机推荐

  1. LeetCode-440 字典序的第K小数字

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/k-th-smallest-in-lexicographical-order 题目描述 给定整数  ...

  2. centos7 部署 loonflow

    a workflow engine base on django 基于django的工作流引擎系统(通过http接口调用,可以作为企业内部统一的工作流引擎,提供诸如权限申请.资源申请.发布申请.请假. ...

  3. asp输入框input通用输入限制

    1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'')" onafte ...

  4. 【Nginx】优化,增加线程

    https://blog.csdn.net/cnskylee/article/details/127645806 众所周知,Nginx一款体积小巧,但是性能强大的软负载,主要被用作后端服务和应用的反向 ...

  5. vue框架回顾

  6. Java面向对象之instanceof和类型转换

    instanceof instanceof(类型转换):利用此关键字可以判断某一个对象是否是指定类的实例 格式: 对象 instanceof 类 返回boolean型 - 如果某个对象是某个类的实例, ...

  7. vscode自定义工作目录

    vscode作为目前最受欢迎的编辑器,一直用vscode,但是最近清理c盘,发现vscode的目录,插件和数据目录,占据了上G的空间,那么,如何自定义 vscode的工作目录和数据目录呢,这里参考了一 ...

  8. 粉色的猫MISC(bugku)

    一  题目描述 ps:本题特别感谢树叶大佬给的一些提示以及WP!欢迎大家关注树木有点绿~~ 二 解题过程 下载附件得到zip压缩包 根据作者提示,压缩包注释应该为压缩包密码. 1.压缩包密码 一开始看 ...

  9. npm 局部安装 jbrowse

    #此处不要加 -g参数 , -g 是全局安装 npm install @jbrowse/cli #用npx 才能使用这个包,无法按照官方文档直接使用 npx jbrowse --version

  10. ENGG1310 P2.1 Intro to CE Computer Systems, Programming & Networking

    课程内容笔记,自用,不涉及任何 assignment,exam 答案 Notes for self-use, do not include any assignments or exams H/W & ...