兴趣所致,搜了一些关于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表等。
分享到:
相关推荐
开源项目“jvmjava”为开发者提供了一种学习JVM内部运作方式的途径。通过阅读和分析源代码,我们可以了解JVM的各个组件,如类加载器、运行时数据区、字节码解释器、垃圾收集器等。这不仅有助于提升Java编程技能,还...
"JVM详解-淘宝内部资料"提供了一套深入理解JVM的资源,涵盖了从基础到高级的各种主题,包括Java虚拟机的生命周期、JVM的体系结构、各个组件的详细解析以及垃圾收集(Garbage Collection, GC)机制等内容。...
通过研究和实现这样一个迷你版本的JVM,开发者可以深入了解JVM的内部结构,包括类加载机制、字节码解析、指令集架构以及内存模型等核心概念。 三、字节码解析 Java字节码是一种中间表示,它是Java源代码编译后的...
为了深入理解JVM优化的相关知识点,我们可以从多个角度...理解JVM内部机制和不同JVM实现之间的区别,对于高效地优化Java应用性能是必不可少的。通过合理地应用各种优化手段,可以有效提升Java应用的运行效率和稳定性。
接下来,我们将详细阐述JVM的基本概念、架构组成以及其内部运作机制等关键知识点。 ### Java虚拟机(JVM)基本概念 Java虚拟机(JVM)是一种用于执行Java字节码的虚拟机,它是Java平台的核心组件之一。JVM使得Java程序...
介绍JVM的内部结构、启动流程以及内存模型。并介绍JVM字节码的执行方式。 第三课 常用JVM参数 堆的分配参数 栈分配及实例讲解 server与client模式 调试跟踪参数 介绍常用的JVM参数,包括内存分配、堆栈分配、...
然而,JVM的内部工作原理对于许多开发者来说仍然是一个神秘的概念。本文将探讨一个特殊的项目——"mini-jvm in rust",该项目是用Rust语言实现的一个小型Java虚拟机,旨在帮助开发者理解JVM的核心机制。项目名为"jvm...
在深入探讨Java虚拟机(JVM)如何处理线程间的资源同步与交互机制之前,我们先来明确几个关键概念:线程、多线程、同步、并发以及它们在Java中的实现方式。Java作为一种广泛应用于分布式系统开发的编程语言,其内部...
对于任何致力于深入理解Java内部机制、JVM工作原理及其实现的开发者来说,这份文档都是不可或缺的参考资料。它不仅提供了理论上的指导,也为实践中的创新留下了广阔的空间,鼓励着新一代的开发者继续探索和拓展Java...
C语言是一种底层、高效且广泛应用的编程语言,用C语言实现JVM可以更好地理解和优化其内部工作原理。在"基于C语言实现的JVM.zip"中,我们可以期待找到一个详细的JVM实现,这将涵盖以下几个关键知识点: 1. **字节码...
`instanceKlass`是HotSpot JVM中的一个核心概念,它是类的内部表示形式,包含了类的所有结构信息。 首先,我们需要理解JVM内存模型。在JVM规范中,内存主要分为堆和方法区两大区域。堆是对象实例的存储场所,而方法...
JVM 笔记 今天,我们要讨论的是 JVM 的笔记,这个笔记包括了 JVM 的基本结构、类加载机制、类文件...在学习 JVM 的过程中,我们需要掌握这些知识点,并且需要了解 JVM 的内部机制,以便更好地理解 JVM 的工作原理。
Java虚拟机规范明确规定了数据类型的内部格式,这意味着不同的JVM实现对相同数据类型的解释是一致的,从而确保了Java程序的平台无关性和可移植性。 #### 二、Java虚拟机JVM规格描述 Java虚拟机的设计目标是提供一...
类加载机制是Java语言中的一个核心概念,它负责将.class文件加载到内存中,创建对应的java.lang.Class对象。JVM将类加载过程分为加载、链接(验证、准备、解析)、初始化三个阶段。这个过程是动态的,它允许程序在...
高级语言虚拟机 (JVM) 概念及重要性 - **概念**: JVM(Java Virtual Machine),即Java虚拟机,是一种能够执行字节码(Bytecode)的虚拟机实例。它是运行Java程序的核心组件,负责将Java字节码转换为特定平台上的...
### 初识JVM – JVM概念 #### 一、JVM简介 JVM,即Java Virtual Machine(Java虚拟机),是一种能够执行特定机器指令的虚拟机。它通过软件模拟了一个完整的计算机系统,允许Java程序在任何支持JVM的平台上运行而...
线程间的同步和通信也是JVM中的重要概念,例如使用synchronized关键字、wait/notify机制以及Lock接口等。 6. 性能优化:JVM提供了许多工具和参数供开发者调整,如JConsole、VisualVM等,用于监控和分析JVM的运行...
#### 二、JVM规范的关键概念 **1. Java虚拟机(JVM)简介** Java虚拟机是一种能够执行Java字节码的软件模拟器。它在不同的操作系统上运行相同的字节码,从而实现了“一次编写,到处运行”的理念。JVM负责内存管理、...