理解JVM(1)- JVM是什么

日常Java开发过程中,我们经常会提及JVM,那么它究竟是什么呢?


它是什么?

JVM全称Java Virtual Machine(Java虚拟机),是一个虚构出来的计算机,它屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码,ByteCode), 就可以在多种平台上不加修改地运行。这背后其实就是JVM把字节码翻译成具体平台上的机器指令,从而实现“一次编写,到处运行(Write Once, Run Anywhere)”。


它在哪里?

  • %JAVA_HOME%binjava.exe
  • %JAVA_HOME%binjavaw.exe
  • %JAVA_HOME%binjavaws.exe
  • %WINDIR%binsystem32java.exe
    是上面这些吗?No! These are ONLY Lauchers!

它在这里:

  • %JAVA_HOME%jrebinclientjvm.dll
  • %JAVA_HOME%jrebinserverjvm.dll

它与JRE/JDK是什么关系?

从上图可以看出:

  • JVM只是JRE的一部分。
  • JRE(Java Runtime Environment,Java运行环境),包含了Java虚拟机、Java基础类库,是使用Java语言编写的程序运行时所需要的软件环境,是提供给想运行Java程序的用户使用的,普通用户只是运行已开发好的Java程序的话,安装JRE即可。
  • JDK(Java Development Kit,Java开发工具包),Java程序设计语言、Java虚拟机、Java API类库这三部分统称为JDK。作为一个Java程序员,JDK是必须安装的。

它只能运行Java语言编写的程序吗?

或许大部分程序员认为JVM仅仅是用来运行Java程序的,其实在Java发展之初,设计者就曾经考虑过让其他语言也能运行在Java虚拟机之上,在1997年发布的第一版Java虚拟机规范《The Java Virtual Machine Specification》中曾提到:

"In the future, we will consider bounded extensions to the Java virtual machine to provide better support for other languages"

当Java虚拟机发展到JDK 1.7 ~ 1.8的时候,这个设想基本实现了。时至今日,除了Java语言之外,已经有一大批语言能运行在Java虚拟机之上。这使得JVM除了能做到平台无关性之外,在语言无关性上也做的越来越好。



至此,先对JVM有一个简单初步的了解,后续会逐步深入理解它的体系结构。

时间: 2024-10-23 10:52:34

理解JVM(1)- JVM是什么的相关文章

深入理解Java虚拟机:JVM高级特性与最佳实践

目 录 [ - ] <深入理解Java虚拟机:JVM高级特性与最佳实践>前言 <深入理解Java虚拟机:JVM高级特性与最佳实践>内容特色 <深入理解Java虚拟机:JVM高级特性与最佳实践>目录 第1章 走近Java 1.1 概述 1.2 Java技术体系 1.3 Java发展史 1.4 展望Java技术的未来 1.4.1 模块化 1.4.2 混合语言 1.4.3 多核并行 1.4.4 进一步丰富语法 1.4.5 64位虚拟机 1.5 实战:自己编译JDK 1.5.1

深入理解Java之JVM堆内存分配

Java堆是被所有线程共享的一块内存区域,所有对象和数组都在堆上进行内存分配.为了进行高效的垃圾回收,虚拟机把堆内存划分成新生代.老年代和永久代(1.8中无永久代,使用metaspace实现)三块区域. Java把内存分成两种:栈内存和堆内存.关于堆内存和栈内存的区别与联系.简单的来讲,堆内存用于存放由new创建的对象和数组,在堆中分配的内存,由java虚拟机自动垃圾回收器来管理.而栈内存由使用的人向系统申请,申请人进行管理. 堆内存初始化 Java中分配堆内存是自动初始化的,其入口位于Univ

深入理解JVM内幕:从基本结构到Java 7新特性

转自:http://www.csdn.net/article/2012-12-05/2812509-Java-JVM CSDN首页>软件研发 深入理解JVM内幕:从基本结构到Java 7新特性 发表于2012-12-05 09:02|6064次阅读| 来源ImportNew|38 条评论| 作者 朱伟杰 JavaJVM编程语言 摘要:许多没有深入理解JVM的开发者也开发出了很多非常好的应用和类库.不过,如果你更加理解JVM的话,你就会更加理解Java,这样你会有助于你处理类似于我们前面的案例中的

[jjzhu学java]深入理解JVM笔记之内存管理机制

深入理解JVM笔记之内存管理机制 运行时数据区域 程序计数器 JVM栈 本地方法栈 Java堆 方法区 运行时常量池 直接内存 对象访问 OutOfMemoryError异常 Java堆溢出示例 JVM栈和本地方法栈溢出 运行时常量池溢出 本机直接内存溢出 深入理解JVM笔记之内存管理机制 运行时数据区域 程序计数器 每个线程都有一个程序计数器(PC),是当前线程所执行的字节码的行号指示器,通过改变程序计数器的值来选取下一条指令.各线程之间的计数器互不影响,是线程私有的内存. 如果线程执行的是一

JVM性能优化,Java的伸缩性

很多程序员在解决JVM性能问题的时候,花开了很多时间去调优应用程序级别的性能瓶颈,当你读完这本系列文章之后你会发现我可能更加系统地看待这类的问题.我说过JVM的自身技术限制了Java企业级应用的伸缩性.首先我们先列举一些主导因素. l 主流的硬件服务器提供了大量的内存 l 分布式系统有大量内存的需求,而且该需求在持续增长 l 一个普通Java应用程序所持有的对空间大概在1GB~4GB,这远远低于一个硬件服务器的内存管理能力以及一个分布式应用程序的内存需求量.这被称之为Java内存墙,如下图所示(

[JVM]垃圾收集算法

本文"垃圾收集算法"节选自<深入理解Java虚拟机:JVM高级特性与最佳实践>[作者:周志明] 由于垃圾收集算法的实现涉及大量的程序细节,而且各个平台的虚拟机操作内存的方法又各不相同,因此本节不打算过多地讨论算法的实现,只是介绍几种算法的思想及其发展过程. 1 标记-清除算法 最基础的收集算法是"标记-清除"(Mark-Sweep)算法,如它的名字一样,算法分为"标记"和"清除"两个阶段:首先标记出所有需要回收的对

学习JVM虚拟机有什么实践意义?

问题描述 学习JVM虚拟机有什么实践意义? 最近,有朋友问我你会JVM虚拟机类加载么,我的回答是,大概了解.具体内容,没办法具体讲出来?请问大家觉得需要把JVM虚拟机的原理与实现线路图弄的很明白么.有什么实践意义?毕竟,不是在做博士论文.这里关于JVM有几个知识点,大家给点意见: 1.垃圾回收算法与原理 2.类字节码规范与执行引擎 3.内存模型与线程 4.类加载机制 5.编译器 解决方案 只有学了程序背后的东西才能成为CTO 解决方案二: 如果简单开发没必要,但如果要做深,那多了解了解还是很有必

一篇笔记整理JVM工作原理

首先要了解的 >>数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型. 基本类型的变量保存原始值,即:他代表的值就是数值本身:而引用类型的变量保存引用值. "引用值"代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置. 基本类型包括:byte,short,int,long,char,float,double,Boolean,returnAddress 引用类型包括:类类型,接口类型和数组. >>堆与栈 栈是运行时的

JVM性能优化(一)JVM技术入门

作者 Eva Andreasson  译者:赵峰 校对:方腾飞  原文链接 Java应用程序是运行在JVM上的,但是你对JVM技术了解吗?这篇文章(这个系列的第一部分)讲述了经典Java虚拟机是怎么样工作的,例如:Java一次编写的利弊,跨平台引擎,垃圾回收基础知识,经典的GC算法和编译优化.之后的文章会讲JVM性能优化,包括最新的JVM设计--支持当今高并发Java应用的性能和扩展. 如果你是一个开发人员,你肯定遇到过这样的特殊感觉,你突然灵光一现,所有的思路连接起来了,你能以一个新的视角来回

Java的一些基础小知识之JVM与GC (转)

  一.JVM是什么 Java虚拟机(英语:Java Virtual Machine,缩写为JVM),又名爪哇虚拟器,一种能够运行Java bytecode的虚拟机,以堆栈结构机器来进行实做.最早由太阳微系统所研发并实现第一个实现版本,是Java平台的一部份,能够运行以Java语言写作的软件程序.   Java虚拟机有自己完善的硬体架构,如处理器.堆栈.寄存器等,还具有相应的指令系统.JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就