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++那样要使用运算符来释放内存。

 
 

Java虚拟机基础的更多相关文章

  1. Java虚拟机基础知识

    写在前面 之前老大让做一些外包面试,我的问题很简单: 介绍一下工作中解决过比较有意思的问题. HashMap使用中需要注意的点. 第一个问题主要是想了解一下对方项目经验的含金量,第二个问题则是测试下是 ...

  2. JVM,Java虚拟机基础知识新手入门教程(超级通熟易懂)

    作者:请叫我红领巾,转载请注明出处http://www.cnblogs.com/xxzhuang/p/7453746.html,简书地址:http://www.jianshu.com/p/b963b3 ...

  3. Java虚拟机基础知识你知道多少?

    http://www.cnblogs.com/qlky/p/7401841.html java虚拟机结构 http://liuwangshu.cn/java/jvm/1-runtime-data-ar ...

  4. 大战Java虚拟机【0】——目录

    发现一直在上层应用更新博客的我,突然发现也是时候同时更新一波基础知识了.然后就发现了一个点我还没有更新过,那就是Java虚拟机. 很多人在学习Java的时候都或多或少接触过一点,然后几乎有下面几种情况 ...

  5. 深入理解Java虚拟机-如何利用VisualVM对高并发项目进行性能分析

    前面在学习JVM的知识的时候,一般都需要利用相关参数进行分析,而分析一般都需要用到一些分析的工具,因为一般使用IDEA,而VisualVM对于IDEA也不错,所以就选择VisualVM来分析JVM性能 ...

  6. Java基础:Java虚拟机(JVM)

    当我们第一次学习Java时这些原理上的东西就会被提到,但是很少有真正去学习.今天开始从头过一遍Java,打算从JVM开始. 1. JVM是什么 2. JRE和JDK 3. JVM结构 3.1. 程序计 ...

  7. JVM基础系列第6讲:Java 虚拟机内存结构

    看到这里,我相信大家对于一个 Java 源文件是如何变成字节码文件,以及字节码文件的含义已经非常清楚了.那么接下来就是让 Java 虚拟机运行字节码文件,从而得出我们最终想要的结果了.在这个过程中,J ...

  8. JVM基础系列第2讲:Java 虚拟机的历史

    说起 Java 虚拟机,许多人就会将其与 HotSpot 虚拟机等同看待.但实际上 Java 虚拟机除了 HotSpot 之外,还有 Sun Classic VM.Exact VM.BEA JRock ...

  9. JAVA基础知识|java虚拟机(JVM)

    一.JVM简介 java语言是跨平台的,兼容各种操作系统.实现跨平台的基石就是虚拟机(JVM),虚拟机不是跨平台的,所以不同的操作系统需要安装不同的jdk版本(jre=jvm+类库:jdk=jre+开 ...

随机推荐

  1. (转)流量加速插件 FinalSpeed介绍及一键安装教程

    原文章连接:https://blog.kuoruan.com/82.html 1 介绍 官方介绍:FinalSpeed是高速双边加速软件,可加速所有基于tcp协议的网络服务,在高丢包和高延迟环境下,仍 ...

  2. HTML5 开发APP(MUI的一些特性)

    先附mui文档地址:http://dev.dcloud.net.cn/mui/ui/  .mui的UI组件比较简单而且在文档中很好找就不过多说了. 1 在app开发中,使用HTML5+的api,必须m ...

  3. Eclipse常用快捷键大全

    1.ctrl+shift+r:打开资源 这可能是所有快捷键组合中最省时间的了.这组快捷键可以让你打开你的工作区中任何一个文件,而你只需要按下文件名或mask名中的前几个字母

  4. jQuery防京东浮动网站楼层导航代码

    jQuery防京东浮动网站楼层导航代码   <!DOCTYPE html > <html xmlns="http://www.w3.org/1999/xhtml" ...

  5. 教你用python写:HDU刷题神器

    声明:本文以学习为目的,请不要影响他人正常判题 HDU刷题神器,早已被前辈们做出来了,不过没有见过用python写的.大一的时候见识了学长写这个,当时还是一脸懵逼,只知道这玩意儿好屌-.时隔一年,决定 ...

  6. 以太网帧、TCP与UDP段以及IP数据报格式总结

    传输层及其以下的机制由内核提供,是操作系统的一部分,应⽤层由⽤户进程提供应⽤层数据通过协议栈发到⽹络上时,每层协议都要加上⼀个数据⾸部(header),称为封装.不同的协议层对数据包有不同的称谓,在传 ...

  7. 【head first python】1.初识python 人人都爱列表

    #coding:utf-8 #创建简单的python列表 movies = ["The Holy Grail", "The Life of Brain", &q ...

  8. 《Python学习手册》读书笔记【转载】

    转载:http://www.cnblogs.com/wuyuegb2312/archive/2013/02/26/2910908.html 之前为了编写一个svm分词的程序而简单学了下Python,觉 ...

  9. 研究分析JS中的三种逻辑语句

    JS中的三种逻辑语句:顺序.分支和循环语句. 一.顺序语句 代码规范如下:1. <script type="text/javascript"> var a = 10;  ...

  10. 一步一步学J2SE-ConcurrentHashMap原理

    ConcurrentHshMap的数据结构是由一个Segment数组和多个HashEntry数组组成,在Segement数组中包含了HashEntry数组.数据结构如下图所示: Segement数组的 ...