码迷,mamicode.com
首页 > 其他好文 > 详细

对JVM的理解

时间:2017-07-28 13:29:15      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:执行引擎   逻辑地址   加载   字节码   按需加载   翻译   文件加载   img   http   

操作系统内核是至高无尚的内功心法,只有掌握了内功,学习其他的武功才会轻而易举。

现在我们来谈谈java。JVM其实是操作系统中运行的进程,可以把它看成一台虚拟的机器,这台机器可以按需加载可执行二进制文件(字节码文件),然后由虚拟机执行引擎解释执行字节码,将其翻译成cpu可以识别的指令。在jvm的逻辑地址空间中,有方法区(用来存放可执行文件),堆(用于存放对象和数组,jvm垃圾回收器动态分配和回收该区域的内存空间),栈(保存线程的方法调用关系,数据),常量池(存放常量)等。因此,一个Java虚拟机实例在运行过程中有三个子系统来保障它的正常运行,分别是类加载器子系统, 执行引擎子系统和垃圾收集子系统。字节码文件相当于食物,类加载器相当于嘴,执行引擎相当于胃,垃圾回收器相当于排泄系统。    

技术分享

为什么要引入java虚拟机呢?是为了让java能够跨平台。

在c语言中,只需要gcc将源代码文件编译后,操作系统就可以识别该执行文件了。但是在java中,当编译成字节码文件后,操作系统是无法直接运行的,因为不识别,所以引入了JVM,由JVM负责加载字节码文件,然后在JVM中解释执行,将其翻译成cpu可以识别的指令。这样一来,只需要让JVM平台相关就可以了,不同操作系统安装对应版本的JVM,然后由JVM负责和操作系统打交道,从而让java代码变成平台无关的。只需要一次编译,就能够到处执行。

java HelloWorld,该命令会首先启动一个虚拟机进程,将HelloWorld的可执行文件加载到该进程的地址空间,然后解释执行。

在Java虚拟机执行过程中,只有当需要一个类的时候,才会调用类加载器来加载这个类,并不会在开始运行时加载所有的类。 

 

对JVM的理解

标签:执行引擎   逻辑地址   加载   字节码   按需加载   翻译   文件加载   img   http   

原文地址:http://www.cnblogs.com/james111/p/7249617.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!