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 ...
随机推荐
- win10 uwp 拖动控件
我们会使用控件拖动,可以让我们做出好看的动画,那么我们如何移动控件,我将会告诉大家多个方法.其中第一个是最差的,最后的才是我希望大神你去用. Margin 移动 我们可以使用Margin移动,但这是w ...
- PHP Curl模拟登录并抓取数据
使用PHP的Curl扩展库可以模拟实现登录,并抓取一些需要用户账号登录以后才能查看的数据.具体实现的流程如下(个人总结): 1. 首先需要对相应的登录页面的html源代码进行分析,获得一些必要的信息: ...
- Shell中bash的特性小结
Shell: 用户与操作系统之间完成交互式操作的一个接口程序,为用户提供简化了的操作:上世纪的70年代中期在贝尔实验室,Bourne位Unix开发了一个shell程序Bourne Shell,简称sh ...
- Django web框架篇:基础
对于web开发者来说,socket是基础.因为Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 对于真实开发中的python web程序来说,一般会分为两 ...
- 2017 ICPC 广西邀请赛1005 CS Course
CS Course Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- hdu 2196 Computer(树形DP经典)
Computer Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- .NET Core跨平台的奥秘[上篇]:历史的枷锁
微软推出的第一个版本的.NET Framework是一个面向Windows桌面和服务器的基础框架,在此之后,为此微软根据设备自身的需求对.NET Framework进行裁剪,不断推出了针对具体设备类型 ...
- jQuery点击下拉菜单的展示与隐藏
首先点击显示某个div,然后要求再次点击时消失,或者点击document的其他地方会隐藏掉这个层,涉及到冒泡的问题,阻止document冒泡到dom上.代码如下: var $el = $(" ...
- Android 开发笔记___SD卡文件操作
package com.example.alimjan.hello_world.Utils; import android.graphics.Bitmap; import android.graphi ...
- addEventListener 的事件函数的传递【转载】
addEventListener 参数如下: addEventListener(type, listener[, useCapture]); type,事件名称 listener,事件处理器 useC ...