详解JVM工作原理和特点

作者&投稿:栾素 (若有异议请与网页底部的电邮联系)
~

  JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java exe来完成 通过下面 步来完成JVM环境

   创建JVM装载环境和配置

   装载JVM dll

   初始化JVM dll并挂界到JNIENV(JNI调用接口)实例

   调用JNIEnv实例装载并处理class类

  在我们运行和调试Java程序的时候 经常会提到一个JVM的概念 JVM是Java程序运行的环境 但是他同时一个操作系统的一个应用程序一个进程 因此他也有他自己的运行的生命周期 也有自己的代码和数据空间

  首先来说一下JVM工作原理中的jdk这个东西 不管你是初学者还是高手 是j ee程序员还是j se程序员 jdk总是在帮我们做一些事情 我们在了解Java之前首先大师们会给我们提供说jdk这个东西 它在Java整个体系中充当着什么角色呢?我很惊叹sun大师们设计天才 能把一个如此完整的体系结构化的如此完美 jdk在这个体系中充当一个生产加工中心 产生所有的数据输出 是所有指令和战略的执行中心 本身它提供了Java的完整方案 可以开发目前Java能支持的所有应用和系统程序 这里说一个问题 大家会问 那为什么还有j me j ee这些东西 这两个东西目的很简单 分别用来简化各自领域内的开发和构建过程 jdk除了JVM之外 还有一些核心的API 集成API 用户工具 开发技术 开发工具和API等组成

  好了 废话说了那么多 来点于主题相关的东西吧 JVM在整个jdk中处于最底层 负责于操作系统的交互 用来屏蔽操作系统环境 提供一个完整的Java运行环境 因此也就虚拟计算机 操作系统装入JVM是通过jdk中Java exe来完成 通过下面 步来完成JVM环境

   创建JVM装载环境和配置

   装载JVM dll

   初始化JVM dll并挂界到JNIENV(JNI调用接口)实例

   调用JNIEnv实例装载并处理class类

   一.JVM装入环境 JVM提供的方式是操作系统的动态连接文件. 既然是文件那就一个装入路径的问题 Java是怎么找这个路径的呢?当你在调用Java test的时候 操作系统会在path下在你的Java exe程序 Java exe就通过下面一个过程来确定JVM的路径和相关的参数配置了.下面基于Windows的实现的分析.

  首先查找jre路径 Java是通过GetApplicationHome api来获得当前的Java exe绝对路径 c:\j sdk _ \bin\Java exe 那么它会截取到绝对路径c:\j sdk _ \ 判断c:\j sdk _ \bin\Java dll文件是否存在 如果存在就把c:\j sdk _ \作为jre路径 如果不存在则判断c:\j sdk _ \jre\bin\Java dll是否存在 如果存在这c:\j sdk _ \jre作为jre路径.如果不存在调用GetPublicJREHome查HKEY_LOCAL_MACHINE\Sofare\JavaSoft\Java Runtime Environment\ 当前JRE版本号 \JavaHome的路径为jre路径

  

  然后装载JVM cfg文件JRE路径+\lib+\ARCH(CPU构架)+\JVM cfgARCH(CPU构架)的判断是通过Java_md c中GetArch函数判断的 该函数中windows平台只有两种情况 WIN 的 ia 其他情况都为 i 以我的为例 C:\j sdk _ \jre\lib\i \JVM cfg 主要的内容如下     client KNOWN       server KNOWN       hotspot ALIASED_TO  client       classic WARN       native ERROR       green ERROR  

  在我们的jdk目录中jre\bin\server和jre\bin\client都有JVM dll文件存在 而Java正是通过JVM cfg配置文件来管理这些不同版本的JVM dll的.通过文件我们可以定义目前jdk中支持那些JVM 前面部分(client)是JVM名称 后面是参数 KNOWN表示JVM存在 ALIASED_TO表示给别的JVM取一个别名 WARN表示不存在时找一个JVM替代 ERROR表示不存在抛出异常.在运行Java XXX是 Java exe会通过CheckJVMType来检查当前的JVM类型 Java可以通过两种参数的方式来指定具体的JVM类型 一种按照JVM cfg文件中的JVM名称指定 第二种方法是直接指定 它们执行的方法分别是 Java J Java XXaltJVM= 或 Java J XXaltJVM= 如果是第一种参数传递方式 CheckJVMType函数会取参数 J 后面的JVM名称 然后从已知的JVM配置参数中查找如果找到同名的则去掉该JVM名称前的 直接返回该值 而第二种方法 会直接返回 XXaltJVM= 或 J XXaltJVM= 后面的JVM类型名称 如果在运行Java时未指定上面两种方法中的任一一种参数 CheckJVMType会取配置文件中第一个配置中的JVM名称 去掉名称前面的 返回该值 CheckJVMType函数的这个返回值会在下面的函数中汇同jre路径组合成JVM dll的绝对路径 如果没有指定这会使用JVM cfg中第一个定义的JVM 可以通过set _Java_LAUNCHER_DEBUG= 在控制台上测试.

  最后获得JVM dll的路径 JRE路径+\bin+\JVM类型字符串+\JVM dll就是JVM的文件路径了 但是如果在调用Java程序时用 XXaltJVM=参数指定的路径path 就直接用path+\JVM dll文件做为JVM dll的文件路径.

   二 装载JVM dll

  通过第一步已经找到了JVM的路径 Java通过LoadJavaVM来装入JVM dll文件.装入工作很简单就是调用Windows API函数

  LoadLibrary装载JVM dll动态连接库.然后把JVM dll中的导出函数JNI_CreateJavaVM和JNI_GetDefaultJavaVMInitArgs挂接到InvocationFunctions变量的CreateJavaVM和GetDefaultJavaVMInitArgs函数指针变量上 JVM dll的装载工作宣告完成

   三 初始化JVM 获得本地调用接口 这样就可以在Java中调用JVM的函数了.调用InvocationFunctions->CreateJavaVM也就是JVM中JNI_CreateJavaVM方法获得JNIEnv结构的实例.

   四 运行Java程序.

  Java程序有两种方式一种是jar包 一种是class 运行jar Java jar XXX jar运行的时候 Java exe调用GetMainClassName函数 该函数先获得JNIEnv实例然后调用Java类Java util jar JarFileJNIEnv中方法getManifest()并从返回的Manifest对象中取getAttributes( Main Class )的值即jar包中文件 META INF/MANIFEST MF指定的Main Class的主类名作为运行的主类 之后main函数会调用Java c中LoadClass方法装载该主类(使用JNIEnv实例的FindClass) main函数直接调用Java c中LoadClass方法装载该类 如果是执行class方法 main函数直接调用Java c中LoadClass方法装载该类

  然后main函数调用JNIEnv实例的GetStaticMethodID方法查找装载的class主类中

   public static void main(String[] args) 方法 并判断该方法是否为public方法 然后调用JNIEnv实例的

  CallStaticVoidMethod方法调用该Java类的main方法  

lishixinzhi/Article/program/Java/hx/201311/26046




JVM 技术详解:常见的 GC 算法(Parallel\/CMS\/G1)
我们可以选择 JVM 内置的各种算法。如果不通过参数明确指定垃圾收集算法,则会使用相应 JDK 版本的默认实现。本章会详细介绍各种算法的实现原理。串行 GC 对年轻代使用 mark-copy(标记—复制)算法,对老年代使用 mark-sweep-compact(标记—清除—整理)算法。两者都是单线程的垃圾收集器,不能进行并行...

学java需要学习c语言吗
了解JVM的工作原理可以帮助你更好地优化Java程序的性能和内存使用。此外,C语言也是一种广泛使用的编程语言,它被广泛应用于系统编程、嵌入式系统等领域。了解C语言可以帮助你更好地理解和使用这些领域的技术和工具。虽然Java也可以用于系统编程和嵌入式系统,但有时使用C语言可能更加合适。结合我个人的经验...

Java知识点整理归纳?
JVM作为运行的基础,很难相信对于JVM一点都不了解的人可以把语言吃得很透。我在面试有超过3年经验的开发者的时候,JVM几乎就是一个必问的问题了。当然JVM不是唯一决定技术能力好坏的面试问题,但是可以佐证开发能力的高低。在JVM这个大类中,我认为需要掌握的知识有:JVM内存模型和结构 GC原理,性能调优...

深入理解Java虚拟机:JVM高级特性与最佳实践的内容简介
第二部分讲解了jvm的自动内存管理,包括虚拟机内存区域的划分原理以及各种内存溢出异常产生的原因;常见的垃圾收集算法以及垃圾收集器的特点和工作原理;常见的虚拟机的监控与调试工具的原理和使用方法。第三部分分析了虚拟机的执行子系统,包括class的文件结构以及如何存储和访问class中的数据;虚拟机的类创建...

什么是JVM?Java跨平台的原理是什么?
jvm是java的虚拟机,java程序都运行在jvm之上。java跨平台是因为各个平台上安装有jvm,所以你编写的程序代码编译时只需编译一次就行了

帮我解释以下JAVA程序,越详细越好
1:Inside main()2:Cup(1)3:Cup(2)4:f(99)这是程序的输出。解释:jvm首先初始化main方法所在的那个类,然后执行main方法。如此打印了第一行。然后,Cups.cup1是对Cups的静态变量cup1的引用,这会触发对Cups类的初始化,jvm会按照静态变量赋值语句和静态语句块出现的顺序执行它们,所以执行static块...

JVM 参数配置及详解 -Xms -Xmx -Xmn -Xss 调优总结(点赞收藏)_百度知 ...
深入解析JVM参数调优:-Xms、-Xmx、-Xmn、-Xss的秘密 堆内存管理 JVM的内存结构中,堆(H)是核心区域,分为新生代(Young)和年老代(Old,JDK1.7前)\/元空间(Metaspace,JDK1.8后)。32\/64位系统的堆大小受内存物理限制,最大值通常由-Xmx决定。初始堆大小则由-Xms指定,推荐两者保持一致...

Java平台是什么?其运行原理与一般的操作平台有何不同? 何为字节码?采 ...
Java平台:是sun公司开发的编程平台,后来被Oracle收购。这是一个程序开发和运行的平台。运行原理:底层是用c语言写的运行库,也可以说是jvm(java虚拟机)。它是编程平台,不是操作平台(我的理解是你说的操作平台就是操作系统),没有可比性。字节码:java程序写好后会被编译字节码,然后jvm装载该字节码...

java架构师需要学什么
Java架构师,应该把握哪些技能呢,总体来说呢,有两方面,一个是根底技能,另一个便是组织才干和提出处理计划才干了。如果你是想成为Java架构师,那么你首先要是一个Java高档攻城狮。也便是说,根底有必要结实,对Java的了解全面而且深化。娴熟运用各种结构,并知道它们完结的原理。Jvm虚拟机原理、调优...

学会了C++,再去学Java快不?
然而,C++和Java也有很多不同之处,这些不同之处可能会导致你在学习Java时遇到一些新的挑战。首先,Java是一种跨平台的语言,它的代码运行在Java虚拟机(JVM)上,而C++则是直接编译成机器码运行。这也就意味着Java具有更好的跨平台性,但同时也意味着你需要了解JVM的工作原理和内存管理机制。其次,...

永州市18831117345: JVM原理是什么? -
范曹科苏: JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境. 1.创建JVM装载环境和配置 2.装载JVM.dll 3.初始化JVM.dll并挂界到JNIENV(JNI调用接口)实例 4.调用JNIEnv实例装载并处理class类.

永州市18831117345: 什么是JVM?Java跨平台的原理是什么? -
范曹科苏: 首先我们要理解什么是跨平台,所谓的跨平台就是JAVA写的一份代码可以在任意的操作系统平台上运行.为什么跨平台会成为一个问题呢?因为每一个操作系统平台支持不同的指令集我们所写的代码经过编译之后只能适用于一个平台,换一个...

永州市18831117345: 各种JVM都有什么特点 -
范曹科苏: JAVA面向对象最重要的特征就是:封装,继承,多态. 封装是为了方便调用类库里面已经写好的函数,继承是方便对已有函数的功能进行直接调用和扩展.按照原则,java中已经写好的类库会被打包成jar包,不允许调用者更改里面的代码. 但是你可以通过其中的抽象类或者接口,根据具体的业务逻辑进行功能的扩展. 多态的作用是,可以实现对继承对象的统一调度,是面向对象的精髓所在. 另外,java还有语言简单,面向对象,和平台无关性.之所以java可以跨平台,在于他可以通过java虚拟机JVM,将java代码解释成该平台能理解的语言

永州市18831117345: 深入理解Java虚拟机的内容简介 -
范曹科苏: 《深入理解Java虚拟机:JVM高级特性与最佳实践》内容简介:作为一位Java程序员,你是否也曾经想深入理解Java虚拟机,但是却被它的复杂和深奥拒之门外?没关系,本书极尽化繁为简之妙,能带领你在轻松中领略Java虚拟机的奥秘.本书...

永州市18831117345: java虚拟机原理 -
范曹科苏: JVM 的原理就是把写哈的java代码转化为机器可以识别的binary 代码.然后再由compiler 去编译binary代码. 这也就是为什么java是平台无关的原理了.其他的编译环境都是把程序代码转化为编译代码直接编译,这样机器底层就不能识别这些代码,所以不能跨平台操作.而jvm虽然在表面上走了远路,但是这样却省去了不少的麻烦,也省了不少的内存占有.

永州市18831117345: 你知道java的运行原理是什么吗 -
范曹科苏: Java这一语言的执行过程也遵循这样的过程:源代码--->机器码. 但是,从源代码到机器码之间,究竟经过什么样的过程,则是Java独一无二的了.宽泛地讲,Java源代码(.java)经过java编译器(javac.exe)编译之后,并没有直接转化为机器...

永州市18831117345: java虚拟机工作原理? -
范曹科苏: 环境变量设置好classpath和path. classpath是指JVM将要加载的类文件的路径,path指JVM的工具箱的路径 当JVM加载类时,系统会给虚拟机分配一个数据内存区,在这个内存区中,又分为三个小内存区. 堆区是存放这个类的对象的;方法区是存放类的类型信息,包括类的静态变量和方法.栈区是存放局部变量的. 当加载类时,JVM会先把类的类型信息全部存放到方法区,加载完后,定位到方法区中的main方法,开始执行指令.

永州市18831117345: jvm是如何实现的
范曹科苏: 编程语言和自然语言类似,都是为了交流,自然语言用于跟人交流,程序语言则用于指示机器. jvm其实也就是一个程序,这个程序能接受你的Java代码,然后根据你的意愿执行一系列操作. 举个例子,你可以写一个这样的程序,这个程序接受...

永州市18831117345: 简述Java程序从编写到运行的基本步骤,并说明Java的基本工作原理 -
范曹科苏: Java编译原理: Java 虚拟机(JVM)是可运行Java 代码的假想计算机.只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行. 一.Java源文件的编译、下载 、解释和执行 Java应用程...

永州市18831117345: Java虚拟机是什么?哪里下载? -
范曹科苏: 1,什么是Java虚拟机 Java虚拟机(JVM)是Java Virtual Machine的缩写,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能模拟来实现的.Java虚拟机有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网