博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JVM 学习-简介
阅读量:5787 次
发布时间:2019-06-18

本文共 1931 字,大约阅读时间需要 6 分钟。

1 JVM简介  

JVM 全称是Java Virtual Machine,Java虚拟机,也就是在计算机上再虚拟一个计算机。我们知道计算机的基本构成是:运算器、控制器、存储器、输入和输出设备,那这个 JVM 也是有这成套的元素,运算器是当然是交给硬件 CPU 还处理了,只是为了适应“一次编译,随处运 行”的情况,需要做一个翻译动作,于是就用了 JVM 自己的命令集,这与汇编的命令集有点类似, 每一种汇编命令集针对一个系列的 CPU,比如8086系列的汇编也是可以用在8088上的,但是就不 能跑在 8051 上,而JVM的命令集则是可以到处运行的,因为 JVM 做了翻译,根据不同的 CPU,翻 译成不同的机器语言。

  对于做java开发的人员,JVM当中,我们最需要了解其内存的处理。也就是我们写的类、方法、变量、常量如何存在内存中。  

2 JVM的组成部分 

我们先把 JVM 这个虚拟机画出来,如下图所示: 

从这个图中可以看到,JVM是运行在操作系统之上的,它与硬件没有直接的交互。我们再来看下 JVM有哪些组成部分,如下图所示:  

 

整个 JVM分为四部分: Class Loader 类加载器 类加载器的作用是加载类文件到内存,比如编写一个 HelloWord.java程序,然后通过 javac 编译成 class 文件,那怎么才能加载到内存中被执行呢?Class Loader 承担的就是这个责任,那 不可能随便建立一个.class 文件就能被加载的,Class Loader加载的 class文件是有格式要求, 在《JVM Specification》中式这样定义 Class文件的结构: 

     ClassFile{

     u4 magic; 

     u2 minor_version;
 
     u2 major_version; 
     u2 constant_pool_count; 
     cp_info constant_pool[constant_pool_count-1]; 
     u2 access_flags; 
     u2 this_class; 
     u2 super_class; 
     u2 interfaces_count; 
     u2 interfaces[interfaces_count]; 
     u2 fields_count; 
     field_info fields[fields_count]; 
     u2 methods_count; 
     method_info methods[methods_count]; 
     u2 attributes_count; 
     attribute_info attributes[attributes_count]; }

需要详细了解的话,可以仔细阅读《JVM Specification》的第四章“The class File Format”, 这里不再详细说明。

友情提示:Class Loader只管加载,只要符合文件结构就加载,至于说能不能运行,则不是 它负责的,那是由 Execution Engine 负责的。

  • Execution Engine

 

执行引擎 执行引擎也叫做解释器(Interpreter),负责解释命令,提交操作系统执行。

 

  • Native Interface 
本地接口 本地接口的作用是融合不同的编程语言为 Java 所用,它的初衷是融合 C/C++程序,Java 诞生 的时候是 C/C++横行的时候,要想立足,必须有一个聪明的、睿智的调用 C/C++程序,于是就在内 存中专门开辟了一块区域处理标记为 native的代码,它的具体做法是 Native Method Stack中登 记 native方法,在Execution Engine 执行时加载native libraies。目前该方法使用的是越来越 少了,除非是与硬件有关的应用,比如通过 Java程序驱动打印机,或者 Java系统管理生产设备, 在企业级应用中已经比较少见,因为现在的异构领域间的通信很发达,比如可以使用 Socket 通信, 也可以使用 Web Service等等,不多做介绍。

 

 

  • Runtime data area 
运行数据区 运行数据区是整个 JVM 的重点。我们所有写的程序都被加载到这里,之后才开始运行,Java 生态系统如此的繁荣,得益于该区域的优良自治,下一章节详细介绍之。 整个 JVM 框架由加载器加载文件,然后执行器在内存中处理数据,需要与异构系统交互是可以慢慢琢磨 JVM 通过本地接口进行,瞧,一个完整的系统诞生了!

 

 

 

转载于:https://www.cnblogs.com/sundaweixy/archive/2012/02/21/2362074.html

你可能感兴趣的文章
搭建vsftpd服务器,使用匿名账户登入
查看>>
JAVA中循环删除list中元素的方法总结
查看>>
Java虚拟机管理的内存运行时数据区域解释
查看>>
人人都会深度学习之Tensorflow基础快速入门
查看>>
ChPlayer播放器的使用
查看>>
js 经过修改改良的全浏览器支持的软键盘,随机排列
查看>>
Mysql读写分离
查看>>
探寻Interpolator源码,自定义插值器
查看>>
一致性哈希
查看>>
Web日志安全分析工具 v2.0发布
查看>>
JS重载
查看>>
python2和python3同安装在Windows上,切换问题
查看>>
php加速工具xcache的安装与使用(基于LNMP环境)
查看>>
android超链接
查看>>
统计数据库大小
查看>>
第十六章:脚本化HTTP
查看>>
EXCEL表中如何让数值变成万元或亿元
查看>>
L104
查看>>
用javascript获取地址栏参数
查看>>
一起谈.NET技术,你应该知道的15个Silverlight诀窍
查看>>