`
kmplayer
  • 浏览: 500842 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JVM实现机制及内部基本概念

阅读更多
兴趣所致,搜了一些关于JVM的简单介绍,算是扫盲吧。

1.JVM实现机制

Java虚拟机就是一个小的计算机,有自己的指令集,有自己的文件系统,管理内部的表和数据,负责读取class文件里面字节码,然后转换成不同操作系统的CPU指令,从而使得Java程序在不同的操作统上顺利的跑起来。所以Window的JVM能把字节码转换成Window系统的指令集,Linux的JVM能把字节码转换成Linux系统的字节,同理还有Solaris,它们彼此之间是不能通用的。

最早一款的原型虽然是Sun公司开发的,但发展到现在其实任何厂商都可以自己去实现一个虚拟机,用来读取字节码转换成OS指令。甚至我们可以认为JVM跟 Java编程语言都没有关系,因为你自己哪怕用记事本写一串字节码,也可以让JVM来解析运行,只要你的字节码能通过JVM的验证。

JVM的验证其实是很严格的,这里只讲一些有趣的地方。大家还记得Java的图标是一个杯咖啡麽?究其历史我们也许可以查出为什么,但还有更显而易见的方式是JVM怎么判断一个文件是否是class文件?JVM的做法是读取前4个字节转换成16进制数,判断是否等于0xCAFEBABE这个数。注意到这个单词了麽?

“cafebabe”,代表着国外一种咖啡品牌,似乎叫做Peet’scoffee-baristas之类。创造Java的人为了方便记忆,选择了这样一个16进制数作为标准class文件的头,所以任何class文件都必须具有这4个字节的头部。我们可以用DataInput这个接口的实现类来验证一下,读取任何一个class文件的第一个int,int在Java里面是四个字节。转换成16进制一定会是0xcafebabe的。所以这里想告诉大家的是,JVM其实并没有那么神秘,我们完全可以理解它的构造。介绍完了JVM实现机制再来看一下JVM内部的基本概念。

2.JVM内部的基本概念

Java虚拟机内部有一些概念,全部列举是不现实的,太繁琐也没有意义。除非您真的想自己去做一个JVM。笔者只列举部分概念:
首先我们来看一个叫做ReturnAddress的变量,它是JVM用来存储方法出口或者说进行跳转的依据,把任何地址存入这个变量就一定会按照这个地址来跳转。我们需要注意的就是finally有比方法return更高的赋值给ReturnAddress的优先级。同时存在方法return和 finallyreturn的话,一定是按照finally里面的return为准。

JVM有自己的Heap,能被所有线程共享,存储着所有的对象,内存是动态被分配的。对于每个线程,拥有自己的Stack,栈里面存储的单位叫做 Frame(桢)。桢里面就记录着零时变量、对象引用地址、方法返回值等数据。JVM还有一个叫做MethodArea的地方,存储着一段一段的可执行代码,每一段就是一个方法体,也能被所有线程共享。所以我们说一个线程其实从run方法跑起来,跟它的类中声明的其他方法是两个概念。因为其他的方法包括的所有的对象,这个时候都充当为资源被线程使用。

JVM有自己管理内存的方案,因为它具有文件系统的功能,我们可以看成一个小型的数据库,内部有许许多多不同的表。表的字段可能是另外一张表的地址,也可以直接就是一个存储数据值的地址值。JVM所有对运行时候类的解析验证计算等管理工作,实际上都是在管理这些表的变动,如果我们从数据库的角度来看,JVM所做的就是根据你的代码来操作那么多个表最后返回给你结果的过程。里面的表结构包括class的表、field表、method表、 attribute表等。
分享到:
评论

相关推荐

    深入JVM内核 - 原理、诊断与优化

    介绍JVM的内部结构、启动流程以及内存模型。并介绍JVM字节码的执行方式。 第三课 常用JVM参数 堆的分配参数 栈分配及实例讲解 server与client模式 调试跟踪参数 介绍常用的JVM参数,包括内存分配、堆栈分配、...

    jvm笔记

    JVM 笔记 今天,我们要讨论的是 JVM 的笔记,这个笔记包括了 JVM 的基本结构、类加载机制、类文件...在学习 JVM 的过程中,我们需要掌握这些知识点,并且需要了解 JVM 的内部机制,以便更好地理解 JVM 的工作原理。

    深入JVM内核—原理、诊断与优化

    第二周JVM运行机制简介堆、栈、方法区等JVM启动流程内存模型和volatile实例解释和编译运行的概念介绍JVM的内部结构、启动流程以及内存模型。并介绍JVM字节码的执行方式。第三周常用JVM参数堆的分配参数栈分 资源太大...

    starcwang-canal_mysql_elasticsearch_sync-master.zip

    即使对于JVM GC机制不够熟悉,头脑里还是需要有这么一个基本概念: 应用层面生成大量长生命周期的对象,是给heap造成压力的主要原因,例如读取一大片数据在内存中进行排序,或者在heap内部建cache缓存大量数据。...

    zxporz-ESClientRHL-es7.zip

    即使对于JVM GC机制不够熟悉,头脑里还是需要有这么一个基本概念: 应用层面生成大量长生命周期的对象,是给heap造成压力的主要原因,例如读取一大片数据在内存中进行排序,或者在heap内部建cache缓存大量数据。...

    阿里云面试经验,详细记录所有面试题,分享个人面试心得

    * HashMap的内部数据结构和实现 * 反射的用途和实现 * 自定义注解的场景和实现 四、Spring相关 * Spring AOP的实现原理和场景 * Spring bean的作用域和生命周期 * Spring Boot对Spring的改进 * 自定义Spring Boot ...

    突破程序员基本功的16课.part2

    10.2.3 队列的顺序存储结构及实现 10.2.4 循环队列 10.2.5 队列的链式存储结构及实现 10.2.6 Java集合中的队列 10.3 双向队列 10.4 小结 第11课 树和二叉树 11.1 树的概述 11.1.1 树的定义和基本术语 ...

    JAVA新特性--java反射、映射

    反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内部信息,而不是源代码中选定的类协作的代码。这使反射成为构建灵活的应用的主要工具。但需注意的是:如果使用不当,反射的成本很高。

    java高级工程师面试题及答案.docx

    * JVM 的加载机制:JVM 负责在运行时加载类文件,ClassLoader 和它的子类来实现类的加载。JVM 中类的装载是由 ClassLoader 和它的子类来实现的。 * JVM 的内存模型:Java 的内存分为两类,一类是栈内存,一类是堆...

    j-j-jvm:用Java编写的JVM字节码解释器

    历史2009年,我在周末有一些空闲时间,决定尝试使用纯Java开发小型JVM解释器,该解释器可在J2ME CLDC 1.0平台中使用,因为该平台不支持ClassLoader,... JVM解释器不包含任何“ Poka-yoke”(防错)机制和字节码验证

    JavaSE知识点总结(个人整理).docx

    类加载机制是 JavaSE 中的一种机制,类加载机制是指 Java虚拟机(JVM)加载类的过程。类加载机制包括加载、链接、初始化三个阶段。 五、IO 体系 IO 体系是 JavaSE 中的一种机制,IO 体系提供了输入/输出操作的支持...

    AIC的Java课程1-6章

    Java入门 4课时  了解Java程序开发环境,理解JVM的运作机制。  初步认识面向对象编程,Java视一切为对象。  使用输入和输出语句编写简单的Java应用程序。  区分applet与application...

    Java岗面试核心MCA版.pdf

    1. 抽象类和接口的对比:抽象类和接口都是抽象的概念,抽象类可以包含具体实现,而接口只能包含抽象方法。 2. 普通类和抽象类的区别:普通类可以实例化,而抽象类不能实例化。 3. 创建对象:使用new关键字创建...

    千方百计笔试题大全

    73、线程的基本概念、线程的基本状态以及状态之间的关系 18 74、sleep() 和 wait() 有什么区别? 18 75、socket通信(tcp/udp区别及JAVA的实现方式) 18 76、什么是java序列化,如何实现java序列化? 18 77、简述...

    java面试宝典

    73、线程的基本概念、线程的基本状态以及状态之间的关系 18 74、sleep() 和 wait() 有什么区别? 18 75、socket通信(tcp/udp区别及JAVA的实现方式) 18 76、什么是java序列化,如何实现java序列化? 18 77、简述...

    实习生简历模板(1).docx

    这意味着作者理解 Java 虚拟机的内部工作机制,能够正确地使用 JVM 的特性来提高程序的执行效率。 数据库 作者熟练使用 MySQL 数据库,熟悉事务控制、索引。这说明作者能够使用 MySQL 数据库来存储和管理数据,...

    58-初级软件开发工程师(Java)考试大纲.docx

    * 多线程根本概念及模型 * 线程的创立及状态控制 * 多线程共享数据 * 线程的同步及通信 * 网络通信 * URL 类的使用 * 通过 Socket 实现网络通信 五、数据库基础知识 * 数据库安装方法 * 数据库概念 * 数据库主要...

    疯狂JAVA讲义

    1.3.2 Java程序的运行机制和JVM 6 1.4 开发Java的准备 7 1.4.1 安装JDK 8 学生提问:不是说JVM是运行Java程序的虚拟机吗?那JRE和JVM的关系是怎样的呢? 8 学生提问:为什么不安装公共JRE系统呢? 9 1.4.2 设置...

    2023年Java编程基础知识点汇总及习题集答案.docx

    封装是面向对象编程的一种机制,用于隐藏对象的内部实现。 七、 异常知识点汇总 异常知识点汇总包括 try 语句、catch 语句、finally 语句、throw 语句等知识点。 1. try 语句 try 语句用于捕捉异常,避免程序的...

Global site tag (gtag.js) - Google Analytics