Java虚拟机基础

简介: Java虚拟机基础

Java虚拟机基础


JVM是Java Virtual Machine的缩写。JVM是一个可以将Java字节码转换成机器语言并能被机器(电脑)执行的Java字节码处理引擎。Java字节码是处于Java和机器之间的语言,当其被JVM转化成机器语言时就能被机器执行。

 

JVM简单介绍


首先简单介绍下Java字节码、JVM以及机器的概念。


当一个Java程序被创建后,后缀为.java的文件也就被创建了。该文件包含多个属性,包括类、方法、对象等等。后缀为.java的文件接着会被Java编译器编译,从而产生后缀为.class的文件(也称为Java字节码文件)。JVM会阅读并理解这个.class文件并将其解释为机器语言,从而能执行这个文件

 

JVM这个平台是独立的吗?


Java是平台不独立的因为它需要JVM,虽然JVM是平台独立的。可以运行Java代码的机器上必须要先安装好JVM。在能执行Java字节码的机器上,JVM会解释.class文件并且产生不同的只能被机器理解的机器语言。不同的机器上可能有着不同的操作系统, 例如:Windows、Mac OS、Unix或者Linux。如果机器上没有安装JVM的话,这些操作系统是不能解释Java字节码的,因为一个操作系统只能理解机器语言。JVM将Java字节码转化成机器语言并让它能被操作系统理解和执行。这意味着Java可以运行在任何机器上,前提是该机器上安装了JVM。

 

JVM的组成


当解释和执行Java字节码的时候,JVM使用了多个组件,例如:栈、寄存器、垃圾回收器等等。接下来让我们对它的组件有个初步的认识:


栈:它是方法的参数和本地变量的仓库。它可以被指向不同区域的寄存器熟练控制。


寄存器:在JVM中有许多寄存器,比如Vars(指向当前执行环境中第一个局部变量的指针)、Frame(当前环境指针)、PC(程序计数器)和OpTop(操作数栈顶指针)。Vars寄存器指向正在被当前方法使用的本地变量。frame寄存器指向当前执行环境,也就是栈的环境。OpTop寄存器指向运算栈,字节码的指令在这里执行。程序计数器寄存器指向保存字节码的方法区。所有寄存器均为32位。PC用于记录程序的执行。optop,frame和vars用于记录指向Java栈区的指针。


方法区:它是保存Java字节码的地方。该区域能被所有线程共享,因此能确保线程同步。 


垃圾回收器:它是JVM真正保存Java对象的组件。需要注意的是,Java对象的引用是保存在栈中的,而真正的对象在垃圾回收器中。Java使用垃圾回收机制来释放内存并分配给不同的对象,不像C/C++那样要使用运算符来释放内存。

相关文章
|
1月前
|
存储 监控 算法
深入探索Java虚拟机(JVM)的内存管理机制
本文旨在为读者提供对Java虚拟机(JVM)内存管理机制的深入理解。通过详细解析JVM的内存结构、垃圾回收算法以及性能优化策略,本文不仅揭示了Java程序高效运行背后的原理,还为开发者提供了优化应用程序性能的实用技巧。不同于常规摘要仅概述文章大意,本文摘要将简要介绍JVM内存管理的关键点,为读者提供一个清晰的学习路线图。
|
3月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
98 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
6月前
|
存储 算法 安全
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
85 0
|
3月前
|
存储 算法 Java
Java虚拟机(JVM)的内存管理与性能优化
本文深入探讨了Java虚拟机(JVM)的内存管理机制,包括堆、栈、方法区等关键区域的功能与作用。通过分析垃圾回收算法和调优策略,旨在帮助开发者理解如何有效提升Java应用的性能。文章采用通俗易懂的语言,结合具体实例,使读者能够轻松掌握复杂的内存管理概念,并应用于实际开发中。
|
4月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
|
4月前
|
存储 算法 Java
深入解析 Java 虚拟机:内存区域、类加载与垃圾回收机制
本文介绍了 JVM 的内存区域划分、类加载过程及垃圾回收机制。内存区域包括程序计数器、堆、栈和元数据区,每个区域存储不同类型的数据。类加载过程涉及加载、验证、准备、解析和初始化五个步骤。垃圾回收机制主要在堆内存进行,通过可达性分析识别垃圾对象,并采用标记-清除、复制和标记-整理等算法进行回收。此外,还介绍了 CMS 和 G1 等垃圾回收器的特点。
142 0
深入解析 Java 虚拟机:内存区域、类加载与垃圾回收机制
|
5月前
|
Java
Java常见JVM虚拟机指令(47个)
Java常见JVM虚拟机指令(47个)
80 3
Java常见JVM虚拟机指令(47个)
|
6月前
|
监控 Oracle Java
(一)JVM成神路之初识虚拟机 - 探寻Java虚拟机的前世今生之秘
JVM(Java Virtual Machine)Java虚拟机的概念大家都不陌生,Java之所以可以做到“一次编译,到处运行”的跨平台性,其根本原因就在于JVM。JVM是建立在操作系统(OS)之上的,Java虚拟机屏蔽了开发人员与操作系统的直接接触,我们在通过Java编写程序时,只需要负责编写Java代码即可,关于具体的执行则会由JVM加载字节码后翻译成机械指令交给OS执行。
115 1
|
5月前
|
Java 数据安全/隐私保护 Windows
【Azure Developer】使用Java代码启动Azure VM(虚拟机)
【Azure Developer】使用Java代码启动Azure VM(虚拟机)
|
5月前
|
存储 Java API
【Azure Developer】通过Azure提供的Azue Java JDK 查询虚拟机的CPU使用率和内存使用率
【Azure Developer】通过Azure提供的Azue Java JDK 查询虚拟机的CPU使用率和内存使用率