1、 什么是JVM

JVM的全称是Java Virtual Machine(Java虚拟机),它通过模拟一个计算机来达到计算机所具有的计算功能。

2、 JVM体系结构详解

JVM的结构基本上由四部分组成:

----类加载器(ClassLoader):在JVM启动时或运行时将需要的class加载到JVM中。

----执行引擎:负责执行class文件中包含的字节码命令,相当于实际机器上的CPU。

执行引擎也就是执行一条条代码的流程,而代码都包含在方法内,所以执行引擎本质上就是执行一个个方法所串起来的流程,也就是对应我们通常所说的Java线程,每个Java线程就是一个执行引擎的实例。

----内存区:将内存区划分成若干个区以模拟实际机器上的存储、记录和调度功能模块,

如实际机器上的各种功能的寄存器或者PC指针的记录器等。

执行引擎在执行一段程序时需要存储一些东西,如操作码需要的操作结果、操作数等,这些都保存在内存中。

----本地方法调用:调用C或C++实现的本地方法的代码返回结果等。

3、 JVM工作机制

通常一个程序从编写到执行会经历一下一些阶段:

源代码(source code)→预处理器(preprocessor)→编译器(compiler)→汇编程序(assembler)→目标代码(object code)→链接器(Linker)→可执行程序(executables)

除了源代码和最后的可执行程序,中间的所有环节都是由现代意义上的编译器统一完成的。

不管是何种指令集都只有几种基本的元素:加、减、乘、求余、求模等。这些运算又可以 进一步分解成二进制运算:与、或、异或等。这些运算又通过指令来完成,而指令的核心目的就是确定需要运算的种类(操作码)和需要运算的数据(操作数),以及从哪里(寄存器或栈)获取操作数,将运算结果存放到什么地方(寄存器或是栈)等。这种不同的操作方式又将指令划分成:一地址指令、二地址指令、三地址指令和零地址指令等n地址指令。相应的指令集会有对应的架构实现,如基于寄存器的架构实现或基于栈的架构实现,这里的基于寄存器或者栈都是指在一个指令中的操作数是如何存取的。

4、 JVM基于栈设计的理由

----JVM要设计成与平台无关的,而平台无关性就要保证在没有或有很少的寄存器的机器上也要同样能正确的运行代码。

----为了指令的紧凑性。

5、 执行引擎的架构设计

每当创建一个新的线程时,JVM会为这个线程创建一个Java栈,并分配一个PC寄存器,PC寄存器会指向这个线程的第一行可执行代码。每当执行一个新的方法时,JVM会为这个栈分配一个新的栈帧,栈帧包含了对应方法的参数、内部变量、执行结果等。

6、 执行引擎的执行过程

直接看上图这段代码,我们来对main方法中的字节码指令做一个分析:

代码执行之前,寄存器的指针指向第一条指令的地址(偏移量0),局部变量区和操作栈都没有数据。代码开始执行之后,根据指令开始操作栈和变量区进行运算。

注意:当main方法中引用了其他方法时,则会创建新的栈帧,寄存器仍旧只有一个。当执行到引用方法时,执行引擎会创建一个新的栈帧,而寄存器保存的是当前栈帧的第一条指令地址,所以值是0。

当执行完return指令时,整个方法对应的栈帧也将撤销,如果当前线程对应的Java栈中没有栈帧,这个Java栈也将被JVM撤销,整个JVM退出。

如何让java代码保存一天内的记录_Java的JVM解读相关推荐

  1. java求2到100内的素数_java学习日记-基础-列出2~100内的素数

    素数的概念:一个整数如果只能整除1和它本身,那么这个整数就是一个素数 方法一:素数是除去能被2整除.3整除.5整除.7整除的整数,但包含2,3,5,7 public classSushu {publi ...

  2. 编写高性能Java代码的最佳实践

    编写高性能Java代码的最佳实践 摘要:本文首先介绍了负载测试.基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践.最后研究了JVM特定的调优技巧.数据库端的优化和架 ...

  3. java replaceall正则表达式_编写高性能Java代码的最佳实践

    作者:Eugen Paraschiv 翻译:雁惊寒https://dzone.com 摘要:本文首先介绍了负载测试.基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践 ...

  4. mybatis-plus生成java代码

    文章目录 前言 一.mybatis-plus生成java代码是什么 二.使用步骤 1.创建maven项目 2.导入项目依赖 3.创建代码生成器CodeGenerator.java 4.代码生成器Cod ...

  5. 编写高性能 Java 代码的最佳实践

    摘要:本文首先介绍了负载测试.基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践.最后研究了JVM特定的调优技巧.数据库端的优化和架构方面的调整.以下是译文. 介绍 ...

  6. MongoDB最简单的入门教程之三 使用Java代码往MongoDB里插入数据

    前两篇教程我们介绍了如何搭建MongoDB的本地环境. 这篇教程我们会介绍如何使用Java代码来连接MongoDB. 如果您是基于Maven进行依赖管理的Java项目,只需要在您的pom.xml里加入 ...

  7. java main函数_一行JAVA代码如何运行起来?

    在程序员的世界中,你总会听到一句"PHP是世界上最好的语言"的调侃.然而在你进入软件程序开发之后,你会发现即使开发语言千千万,最盛行的还是JAVA.从淘宝的技术变迁中我们可以见一些 ...

  8. 局域网内共享文件可集成Java代码实现——FileZilla Server

    局域网内共享文件可集成Java代码实现--FileZilla Server 1. 前言 Filezilla的主要优势在于:高安全.高性能.Filazilla的安全性是来自于其开放源代码的. Filez ...

  9. jsp java代码_jsp内的java代码不执行,急啊!!大家来看看!

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我的jsp页面上的java代码和html代码是穿插的, 用System.out.println去跟踪的时候, 内的代码都不执行, html都是执行的! 怎 ...

最新文章

  1. Oracle语句生成+存储过程测试工具发布:Easytran V0.1
  2. python读写二进制文件的方法
  3. 评估指标_供应链改进常用评估指标
  4. 回顾线程的竞争机制-偏向锁
  5. 英文标点符号翻译大全
  6. 区块链查比特币_登图区块链课堂——比特币矿机发展史
  7. Look at Memory Cost via Batch Size
  8. vue强制刷新组件_强制Vue重新渲染组件的方法
  9. python制作pdf电子书
  10. android viewholder静态,android – 静态ViewHolder并在使用RecyclerView时获取上下文
  11. c4d和3dmax建模哪个好?
  12. mysql数据库加载太慢_MySQL数据库导致网站打开速度慢的解决思路
  13. iOS系统3DTouch全解析
  14. mib文件导入mysql数据库_SNMP mib文件说明
  15. TT语音不灵了,母公司趣丸半年巨亏近10亿,押注电竞能否助推IPO?
  16. 【华为机试真题 Python】跳格子游戏
  17. 深度学习中的深度前馈网络简介
  18. 2021年9月Github优秀项目推荐
  19. 企业和团队如何创建高效实用的知识管理体系
  20. ClickHouse vs Elasticsearch谁更胜一筹?

热门文章

  1. C# 用tabcontrol实现窗体类似网页排版的显示
  2. 在asp.net中解决cookies中文乱码问题
  3. html页面button样式
  4. iphone android 开发指南 http://mobile.tutsplus.com
  5. 解决npm下载包失败的问题
  6. 未能加载文件或程序集“*****.dll”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。(异常来自HRESULT:0x80131040)
  7. Eclipse解决JSP页面乱码问题
  8. Validation failed for one or more entities. See ‘EntityValidationErrors’解决方法
  9. spring mvc 异常统一处理方式
  10. python解决四舍五入问题