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

现在我们来谈谈java。JVM其实是操作系统中运行的进程,JVM有操作系统进程的所有共性,但是它却不是一个普通的进程,它有它特殊的地方,它将许多本来属于操作系统管理范畴的东西,移植到了JVM内部,减少系统调用的开销。

1.在普通程序(如C++)中,如果new一个对象,会产生一个系统调用,由操作系统线程根据对象的大小分配好空间后返回;若要释放对象,也需要detele产生一个系统调用,通知操作系统 对象所占用的空间已经可以回收。但是JVM堆中,只需要在最开始进行一次系统调用,向操作系统申请一整段区域作为java程序的堆,之后创建和销毁对象都不需要再进行系统调用,而是直接由JVM在内部按需分配,这样大大减少了系统调用的开销。同时C++需要明确调用delete进行内存回收,如果程序员忘了就很容易造成内存泄露,然而在JVM中有垃圾回收器负责回收内存。

2.应用程序通常不直接和内核内存打交道,内核内存由操作系统进行管理和使用;不过随着Linux对性能的关注及改进,一些新的特性使得应用程序(JVM)可以使用内核内存,或者是映射到内核空间。Java NIO正是在这种背景下诞生的。在java NIO中,为了减少读写IO系统调用的开销,使用到了内核的内存。当应用程序想将磁盘文件的数据发送网卡,不需要先进行系统调用读入用户空间,再系统调用输出到内核空间,而是直接在内核空间就完成整个操作了,大大减少了系统调用的次数

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

执行引擎包括字节码解释器和JIT(just-in-time)及时编译器,解释器将字节码文件一行一行边解释边执行(解释成cpu能识别的指令),而JIT编译器则是将整个字节码文件编译成cpu能够识别的指令,也就是在执行前全部被翻译为机器码,这样做的好处是将热点代码缓存起来,下次使用的时候cpu直接执行,而不用再逐行解释。

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

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

java HelloWorld,该命令会首先启动一个虚拟机进程,将HelloWorld的可执行文件加载到该进程的地址空间,然后解释执行。在Java虚拟机执行过程中,只有当需要一个类的时候,才会调用类加载器来加载这个类,并不会在开始运行时加载所有的类。这种类的动态加载机制造就了java的多态。

对JVM的理解的更多相关文章

  1. JVM如何理解Java泛型类(转)

    一个很典型的泛型(generic)代码.T是类型变量,可以是任何引用类型: public class Pair<T>{ private T first=null; private T se ...

  2. JVM如何理解Java泛型类

    //泛型代码 public class Pair<T>{ private T first=null; private T second=null; public Pair(T fir,T  ...

  3. JVM深入理解

    JVM深入理解 一.JVM介绍 JVM应用百度百科的原话是: JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过 ...

  4. 谈谈对JVM的理解

            JVM可谓是学习JAVA基础中的基础了,但仍有不少同学对JVM概念还是比较模糊,甚至没有听说过,对java的理解也只是在基础语法 层面,本文就将对JVM进行初步介绍,因篇幅所限,只能介 ...

  5. JVM的理解

    1.Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分.在讨论JVM内存区域划分之前,先来看一下Java程序具体执行的过程: 也相当与 注:JVM(ja ...

  6. [转帖]JVM—深入理解内存模型与垃圾收集机制

    JVM—深入理解内存模型与垃圾收集机制 https://juejin.im/post/5d68dc9ee51d4561ad6548f7 前言 Java是一种跨平台的语言,当初其设计初衷也是为了解决各个 ...

  7. Java 中级 学习笔记 1 JVM的理解以及新生代GC处理流程

    写在最前 从毕业到现在已经过去了差不多一年的时间,工作还算顺利,但总是离不开CRUD ,我觉得这样下去肯定是不行的,温水煮青蛙,势必有一天,会昏昏沉沉的迷失在温水里.所以,需要将之前学习JAVA 当中 ...

  8. jvm优化理解

    jvm架构理解 jvm程序执行流程 编译器和解释器协调工作流程 在部分商用虚拟机中(如HotSpot),java程序最初是通过解释器进行解释执行的,当虚拟机发现某个方法或者某段代码执行的特别频繁后就会 ...

  9. 对JDK,JRE,JVM的理解

    JAVA用到现在还是分不太清楚JDK,JRE,JVM这三者的区别与联系,一直都是模模糊糊的.所以今天整理下此中的关系. 简单说明:我们编写的.java文件经过JDK(JDK的bin目录下javac.e ...

  10. JVM深入理解<二>

    以下内容来自: http://www.jianshu.com/p/ac7760655d9d JVM相关知识详解 一.Java虚拟机指令集 Java虚拟机指令由一个字节长度的.代表某种特定含义的操作码( ...

随机推荐

  1. sizeof 数组与指针

    在学习指针的时候,得到指针的定义和数组的定义一样,但是这时候就很好奇,指针只是一个地址,那数组和指针一样的话,sizeof时怎么得知其长度呢. 于是百度了下面的回复: 千万不要把数组名看成指针,尽管有 ...

  2. Git------Commit和Push的区别

    转载:http://wenda.so.com/q/1435946424728324?src=140 git作为支持分布式版本管理的工具,它管理的库(repository)分为本地库.远程库. git ...

  3. Hibernate_day04--课程安排_Hibernate查询方式_对象导航查询_OID查询

    Hibernate_day04 上节内容 今天内容 Hibernate查询方式 对象导航查询 OID查询 HQL查询 查询所有 条件查询 排序查询 分页查询 投影查询 聚集函数使用 QBC查询 查询所 ...

  4. C语言逻辑运算符

    现在假设有这样一种情况,我们的软件比较特殊,要求使用者必须成年,并且成绩大于等于60,该怎么办呢? 或许你会想到使用嵌套的 if 语句,类似下面这样的代码: #include <stdio.h& ...

  5. poj_2486 动态规划

    题目大意 N个节点构成一棵树,每个节点上有一个权重val[i], 从根节点root出发在树上行走,行走的时候只能沿着树枝行进.最多在树上走k步,每第一次到达某个节点j,可以获得val[j]的收益,求从 ...

  6. DNS rebinging攻击方式

    一.什么是DNS rebinding? 在dns协议中,请求和响应完成一台机器对一个域名的查询,响应信息包含请求域名站点对应的IP地址.假设你向DNS服务器A请求域名youself.domain.co ...

  7. 【BZOJ3622】已经没有什么好害怕的了 容斥+DP

    [BZOJ3622]已经没有什么好害怕的了 Description Input Output Sample Input 4 2 5 35 15 45 40 20 10 30 Sample Output ...

  8. IOS 设置ios中DatePicker的日期为中文格式

    设置ios中DatePicker的日期为中文格式 1.在模拟器中的“设置”-“通用”-“多语言环境”-“语言”设置为“简体中文”, 2.“区域格式”设置为“中国”.

  9. SSH电力项目九--运行监控首页显示

    需求:在首页显示出设备运行情况,并去掉<br>换行符,每隔十分钟刷新一次页面. ElecMenuAction.java 首先注入运行监控service public class ElecM ...

  10. 管理源代码的工具SVN与GIT

    如何看待源代码 源代码是公司的重要资产 对应软件公司来说,源代码相当于固定资产>人才 所以源代码管理对于公司来说是最重要的事物之一 一.管理源代码的工具 SVN:集中式的源代码管理工具,通常必须 ...