java 虚拟机是什么?

      java虚拟机是一个将字节码指令映射为对应物理操作系统指令的程序。

      java程序的运行需要事先安装 jdk,而在jdk内部的jre中其核心就是 jvm。java源码是无法运行的,通过javac编译后的class文件也是无法直接运行在操作系统上的。操作系统仅识别遵守其cpu指令集规范的机器码。而为了使java程序得以运行,jvm在其中充当了这样的一个 翻译官的角色。

其本质就是用 c/c++ 编写的一个可运行的程序。对应不同版本的 操作系统 jvm都有其特有的实现版本。

java 虚拟机有什么意义?

    为了支持 java语言的跨平台特性。

java字节码 是一种介于 源码 与 机器码之间的一种程序指令的描述。 人 与 计算机 都无法识别。但jvm却可以识别,并翻译为对应的机器码。

从而 我们只需要在不同的 操作系统上安装 对应版本的虚拟机 即可以实现 仅编译一次的 字节码文件 运行在 不同版本的操作系统上。实现了 sun公司 1995年的承诺 :"一次编译,到处运行"

同时 jvm还为我们封装了很多实现细节,java语言本身的简单性,是建立在 jvm高度封装了开发中绝大多数难点的基础上。

列如: 对象空间的分配与回收,对内存的管理,线程的同步与调度,并发编程复杂的实现细节,网络编程,与IO处理。

jvm 在简化开发以及实现跨平台特性的前提是一java程序的运行性能为代价的,jvm对字节码的执行系统进行了逻辑上的抽象,是基于内存中虚拟机栈的执行。

这就要比传统的编译型语言基于cpu中指令寄存器的执行速度慢了很多。

而随着java虚拟机的不断发展 实现了各种优化技术,以热点探测技术为主的提升字节码执行速度的优化技术,使得java程序在某些情况下并不比c/c++慢多少。

同时  一些编译器字节码级别的优化大大的简化了 java语言的语法,泛型,枚举还有一些语法糖的引入也增加了java语言本身的可读性。

而随着java虚拟机的不断发展,早已经不再是局限与java语言本身,jvm已经不再仅仅支持java语言,列如Scala.

jvm 不仅仅实现了 跨平台更是实现了跨语言。

java虚拟机概述的更多相关文章

  1. Java 虚拟机概述

    虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的.Java虚拟机有自己完善的硬体架构,如处理器.堆栈.寄存器等,还具有相应的指令系统.Java虚拟机屏蔽了与具体操作系统平 ...

  2. Java虚拟机(一)结构原理与运行时数据区域

    我们来学习Java虚拟机的结构原理与运行时数据区域. 1.Java虚拟机概述 Oracle官方定义的Java技术体系主要包括以下几个部分: Java程序设计语言 各种平台的Java虚拟机 Class文 ...

  3. Java虚拟机 - 结构原理与运行时数据区域

    http://liuwangshu.cn/java/jvm/1-runtime-data-area.html 前言 本来计划要写Android内存优化的,觉得有必要在此之前介绍一下Java虚拟机的相关 ...

  4. 图灵学院笔记-java虚拟机底层原理

    Table of Contents generated with DocToc 一.java虚拟机概述 二.栈内存解析 2.1 概述 2.2 栈帧内部结构 2.2.1 我们来解析一下compute() ...

  5. Java虚拟机JVM学习02 类的加载概述

    Java虚拟机JVM学习02 类的加载概述 类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对 ...

  6. Java虚拟机JVM学习01 流程概述

    Java虚拟机JVM学习01 流程概述 Java虚拟机与程序的生命周期 一个运行时的Java虚拟机(JVM)负责运行一个Java程序. 当启动一个Java程序时,一个虚拟机实例诞生:当程序关闭退出,这 ...

  7. Java虚拟机(JVM)概述

    JVM(Java虚拟机)是一个抽象的计算模型.就如同一台真实的机器,它有自己的指令集和执行引擎,可以在运行时操控内存区域.目的是为构建在其上运行的应用程序提供一个运行环境.JVM可以解读指令代码并与底 ...

  8. [转帖]Java虚拟机(JVM)体系结构概述及各种性能参数优化总结

    Java虚拟机(JVM)体系结构概述及各种性能参数优化总结 2014年09月11日 23:05:27 zhongwen7710 阅读数 1437 标签: JVM调优jvm 更多 个人分类: Java知 ...

  9. 深入理解Java虚拟机 - 垃圾收集概述

    首先需要澄清的是,垃圾收集(GC)的历史远比Java要久远,当我们意识到手动管理内存所带来的麻烦时,懒惰的天性推动先驱们寻找更为简单.易用.关键是傻瓜式的内存管理技术.GC技术起源于1960年诞生于M ...

随机推荐

  1. win10 uwp 通知列表

    经常看到小伙伴问,问已经绑定列表,在进行修改时,不会通知界面添加或删除.这时问题就在,一般使用的列表不会在添加时通知界面,因为他们没有通知. 本文:知道什么是通知的列表,如何去写一个通知列表 在 C# ...

  2. 解决 Win10 UWP 无法使用 ss 连接

    一旦使用了 ss, 那么很多应用就无法连接网络. 本文提供一个方法可以简单使用ss提供的代理. 多谢 wtwsgs 提供方法:http://blog.csdn.net/wtwsgs/article/d ...

  3. 【转】地址空间、内核空间、IO地址空间

    http://blog.csdn.net/wuxinke_blog/article/details/8769131 有这么一系列的问题,是否在困扰着你:用户程序编译连接形成的地址空间在什么范围内?内核 ...

  4. Android———最详细的系统对话框使用

    在实际应用开发中,用到系统对话框中的情况几乎是没有的.按开发流程来说,UI工程师都会给出每一个弹窗的样式,故而在实际开发中都是自定义弹窗的. 即使用到的地方不多,但是我们也是需要了解并且能熟练的运用它 ...

  5. Zookeeper 笔记-角色

    leader:提供读写服务,负责投票的发起和决议,更新系统状态 follower:为客户提供读服务,如果写服务则转发给leader,选举过程参与投票 observer:为客户端提供读服务,如果是写服务 ...

  6. Linux系统用户管理

    一.Linux账户 广义上讲,Linux的账户包括用户账户和组账户两种. Linux系统下的用户账户有两种,普通用户和超级用户.普通用户在系统中的任务就是普通工作,管理员在系统上的任务就是对普通用户和 ...

  7. win8在安装office visio2003出现“请求的操作需要提升”,解决方法

    单击右键,然后以管理员身份运行即可

  8. 聊聊pthread_cond_wait的虚假唤醒

    使用条件变量时,仅仅从pthread_cond_wait返回就说条件成立是不恰当的.我们正确使用pthread_cond_wait的唯一方式是当线程被从pthread_cond_wait唤醒时,再检查 ...

  9. JavaScrpit中异步请求Ajax实现

    在前端页面开发的过程中,经常使用到Ajax请求,异步提交表单数据,或者异步刷新页面. 一般来说,使用Jquery中的$.ajax,$.post,$.getJSON,非常方便,但是有的时候,我们只因为需 ...

  10. [Bayesian] “我是bayesian我怕谁”系列 - Continuous Latent Variables

    打开prml and mlapp发现这部分目录编排有点小不同,但神奇的是章节序号竟然都为“十二”. prml:pca --> ppca --> fa mlapp:fa --> pca ...