java虚拟机概述
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虚拟机概述的更多相关文章
- Java 虚拟机概述
虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的.Java虚拟机有自己完善的硬体架构,如处理器.堆栈.寄存器等,还具有相应的指令系统.Java虚拟机屏蔽了与具体操作系统平 ...
- Java虚拟机(一)结构原理与运行时数据区域
我们来学习Java虚拟机的结构原理与运行时数据区域. 1.Java虚拟机概述 Oracle官方定义的Java技术体系主要包括以下几个部分: Java程序设计语言 各种平台的Java虚拟机 Class文 ...
- Java虚拟机 - 结构原理与运行时数据区域
http://liuwangshu.cn/java/jvm/1-runtime-data-area.html 前言 本来计划要写Android内存优化的,觉得有必要在此之前介绍一下Java虚拟机的相关 ...
- 图灵学院笔记-java虚拟机底层原理
Table of Contents generated with DocToc 一.java虚拟机概述 二.栈内存解析 2.1 概述 2.2 栈帧内部结构 2.2.1 我们来解析一下compute() ...
- Java虚拟机JVM学习02 类的加载概述
Java虚拟机JVM学习02 类的加载概述 类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对 ...
- Java虚拟机JVM学习01 流程概述
Java虚拟机JVM学习01 流程概述 Java虚拟机与程序的生命周期 一个运行时的Java虚拟机(JVM)负责运行一个Java程序. 当启动一个Java程序时,一个虚拟机实例诞生:当程序关闭退出,这 ...
- Java虚拟机(JVM)概述
JVM(Java虚拟机)是一个抽象的计算模型.就如同一台真实的机器,它有自己的指令集和执行引擎,可以在运行时操控内存区域.目的是为构建在其上运行的应用程序提供一个运行环境.JVM可以解读指令代码并与底 ...
- [转帖]Java虚拟机(JVM)体系结构概述及各种性能参数优化总结
Java虚拟机(JVM)体系结构概述及各种性能参数优化总结 2014年09月11日 23:05:27 zhongwen7710 阅读数 1437 标签: JVM调优jvm 更多 个人分类: Java知 ...
- 深入理解Java虚拟机 - 垃圾收集概述
首先需要澄清的是,垃圾收集(GC)的历史远比Java要久远,当我们意识到手动管理内存所带来的麻烦时,懒惰的天性推动先驱们寻找更为简单.易用.关键是傻瓜式的内存管理技术.GC技术起源于1960年诞生于M ...
随机推荐
- 深入浅出 SpringMVC - 1
前言: 本篇笔记是LZ在之前学习 SpringMVC 框架时所的记录,分两篇分享,此篇为基础篇,包括 SpringMVC 环境在 Eclipse 中的搭建,SpringMVC 的 HelloWorld ...
- win10 删除设备和驱动器中你不要的图标
设备和驱动器可能有很多你不想要的东西,360云盘,百度网盘,微云-- 删除设备和驱动器中的百度云图标,360网盘图标,要去注册表 运行 regedit 点开 HKEY_CURRENT_USER\SOF ...
- js 查询 添加 删除 练习
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- Sping AOP初级——入门及简单应用
在上一篇<关于日志打印的几点建议以及非最佳实践>的末尾提到了日志打印更为高级的一种方式——利用Spring AOP.在打印日志时,通常都会在业务逻辑代码中插入日志打印的语句,这实际上是和业 ...
- (七)php运算符
一:算数运算符 +(加).-(减).*(成)./(除) %(取模,求余的意思) <?php $a=7/3; echo $a; //2.3333333333333.因为float类型的最大精度为1 ...
- Git相关操作三
1.显示当前分支: git branch 输入上述命令可以显示出分支,*所在的分支为当前分支. 2.新建分支: git branch new_branch new_branch为新建分支的名称,注意该 ...
- windows消息简单应用实例
//基本定义 internal class MyMessager : IMessageFilter { public bool PreFilterMessage(ref Message m) { // ...
- JavaScrpit中异步请求Ajax实现
在前端页面开发的过程中,经常使用到Ajax请求,异步提交表单数据,或者异步刷新页面. 一般来说,使用Jquery中的$.ajax,$.post,$.getJSON,非常方便,但是有的时候,我们只因为需 ...
- C++STL之双端队列容器
C++STL之双端队列容器 deque双端队列容器与vector很类似,采用线性表顺序存储结构.但与vector区别,deque采用分块的线性存储结构来存储数据,每块的大小一般为512B,将之称为de ...
- The Euler function(线性筛欧拉函数)
/* 题意:(n)表示小于n与n互质的数有多少个,给你两个数a,b让你计算a+(a+1)+(a+2)+......+b; 初步思路:暴力搞一下,打表 #放弃:打了十几分钟没打完 #改进:欧拉函数:具体 ...