iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何剖析JVM工作原理和特点
  • 838
分享到

如何剖析JVM工作原理和特点

2023-06-17 13:06:56 838人浏览 泡泡鱼
摘要

这期内容当中小编将会给大家带来有关如何剖析JVM工作原理和特点,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。向大家简单介绍一下JVM工作原理和特点,在我们运行和调试Java程序的时候,经常会提到一个JVM

这期内容当中小编将会给大家带来有关如何剖析JVM工作原理和特点,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

向大家简单介绍一下JVM工作原理和特点,在我们运行和调试Java程序的时候,经常会提到一个JVM的概念。JVM是Java程序运行的环境,但是他同时一个操作系统的一个应用程序一个进程,因此他也有他自己的运行的生命周期,也有自己的代码和数据空间.。

详解JVM工作原理和特点

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

创建JVM装载环境和配置

装载JVM.dll

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

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

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

首先来说一下JVM工作原理中的jdk这个东西,不管你是初学者还是高手,是j2ee程序员还是j2se程序员,jdk总是在帮我们做一些事情.我们在了解Java之前首先大师们会给我们提供说jdk这个东西.它在Java整个体系中充当着什么角色呢?我很惊叹sun大师们设计天才,能把一个如此完整的体系结构化的如此***.jdk在这个体系中充当一个生产加工中心,产生所有的数据输出,是所有指令和战略的执行中心.

本身它提供了Java的完整方案,可以开发目前Java能支持的所有应用和系统程序.这里说一个问题,大家会问,那为什么还有j2me,j2ee这些东西,这两个东西目的很简单,分别用来简化各自领域内的开发和构建过程.jdk除了JVM之外,还有一些核心的api,集成API,用户工具,开发技术,开发工具和API等组成

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

创建JVM装载环境和配置

装载JVM.dll

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

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

知道了JVM工作原理下面看一下如何搭建JVM环境。

一.JVM装入环境,JVM提供的方式是操作系统的动态连接文件.

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

首先查找jre路径,Java是通过GetApplicationHomeapi来获得当前的Java.exe绝对路径,c:\j2sdk1.4.2_09\bin\Java.exe,那么它会截取到绝对路径c:\j2sdk1.4.2_09\,判断c:\j2sdk1.4.2_09\bin\Java.dll文件是否存在,如果存在就把c:\j2sdk1.4.2_09\作为jre路径,如果不存在则判断c:\j2sdk1.4.2_09\jre\bin\Java.dll是否存在,如果存在这c:\j2sdk1.4.2_09\jre作为jre路径.如果不存在调用GetPublicJREHome查HKEY_LOCAL_MacHINE\Software\JavaSoft\JavaRuntimeEnvironment\“当前JRE版本号”\JavaHome的路径为jre路径。

然后装载JVM.cfg文件JRE路径+\lib+\ARCH(CPU构架)+\JVM.cfgARCH(CPU构架)的判断是通过Java_md.c中GetArch函数判断的,该函数中windows平台只有两种情况:WIN64的‘ia64’,其他情况都为‘i386’。以我的为例:C:\j2sdk1.4.2_09\jre\lib\i386\JVM.cfg.主要的内容如下:

-clientKNOWN-serverKNOWN  -hotspotALIASED_TO-client  -classicWARN-nativeERROR  -greenERROR

在我们的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表示不存在抛出异常.在运行JavaXXX是,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=1在控制台上测试

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

二:装载JVM.dll

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

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-jarXXX.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主类中

“publicstaticvoidmain(String[]args)”方法,并判断该方法是否为public方法,然后调用JNIEnv实例的

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

上述就是小编为大家分享的如何剖析JVM工作原理和特点了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网精选频道。

--结束END--

本文标题: 如何剖析JVM工作原理和特点

本文链接: https://www.lsjlt.com/news/289612.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何剖析JVM工作原理和特点
    这期内容当中小编将会给大家带来有关如何剖析JVM工作原理和特点,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。向大家简单介绍一下JVM工作原理和特点,在我们运行和调试Java程序的时候,经常会提到一个JVM...
    99+
    2023-06-17
  • JVM工作原理和特点是什么
    本篇文章给大家分享的是有关JVM工作原理和特点是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。我们运行和调试Java程序的时候,经常会提到一个JVM的概念,这里向大家描述一...
    99+
    2023-06-17
  • HTTP协议的特点和工作原理是什么
    本篇内容介绍了“HTTP协议的特点和工作原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、HTTP简介1、简介HTTP超文本传输协...
    99+
    2023-07-02
  • 如何深度剖析Python语言特点
    这期内容当中小编将会给大家带来有关如何深度剖析Python语言特点,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。这里并不涉及python的特殊规则和细节,目标是通过示例使你快速了解Python语言的特点。...
    99+
    2023-06-17
  • 剖析SpringWebFlux反应式编程设计及工作原理
    目录前言接口抽象WebServerReactiveWebServerFactoryHttpHandler启动流程分析ReactiveWebServerApplicationConte...
    99+
    2024-04-02
  • 深入剖析Python递归函数的工作原理和实际应用
    深入解析Python递归函数的原理与应用 一、引言递归函数在计算机科学中是一种常见而强大的工具。它允许函数在自身内调用,通过重复调用自身来解决问题。Python作为一门强大的编程语言,其递归函数在处理一些问题时表现出了出色的性能...
    99+
    2024-02-02
    原理 应用
  • Golang中接口的工作原理和特性深入解析
    探索Golang中接口的实现原理与特性 引言:Golang是一种现代化的编程语言,凭借其简洁性、高效性和强大的并发支持而受到广泛关注。其中,接口是Golang中一个重要的特性,使得代码能够更加灵活、可扩展和易...
    99+
    2024-01-24
    接口 Golang 实现原理
  • 深入浅出ASP数据缓存:剖析其工作原理和应用技巧
    ASP数据缓存是一种内置于ASP.NET平台中的高速、高性能的缓存机制,用于存储并快速检索应用程序中经常访问的数据。通过缓存数据,ASP.NET应用程序可以减少对数据库或其他数据源的访问次数,从而显著提升应用程序的性能。 一、ASP数据...
    99+
    2024-02-04
    ASP;数据缓存;性能优化;应用技巧
  • 如何深入分析Spring MVC工作原理
    这篇文章将为大家详细讲解有关如何深入分析Spring MVC工作原理,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Spring MVC框架介绍Spring MVC属于SpringFrameW...
    99+
    2023-06-05
  • Ajax工作原理及优缺点的示例分析
    这篇文章将为大家详细讲解有关Ajax工作原理及优缺点的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.Ajax是什么?全称是 asynchronous javascript and xml,是已...
    99+
    2023-06-08
  • 如何剖析Spring高级事务管理难点
    今天就跟大家聊聊有关如何剖析Spring高级事务管理难点,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、Spring事务传播行为所谓事务传播行为就是多个事务方法相互调用时,事务如何...
    99+
    2023-06-17
  • 如何剖析TFS 2010中工作区的改进细节
    今天给大家介绍一下如何剖析TFS 2010中工作区的改进细节。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。在TFS(Team Foundation Serve...
    99+
    2023-06-17
  • 如何进行Spring源码剖析AOP实现原理
    今天就跟大家聊聊有关如何进行Spring源码剖析AOP实现原理,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前言前面写了六篇文章详细地分析了Spring Bean加载流程,这部分完了...
    99+
    2023-06-02
  • 解析springBoot-actuator项目构造中health端点工作原理
    目录前言actuator功能和集成分离actuator自动装载健康检查指示器配置健康检查端点配置health健康检查实现自定义健康检查指示器health其他使用细节文末结语前言 最近...
    99+
    2024-04-02
  • PHP权限控制修饰符解析:深入剖析各种修饰符的特点和作用
    在Web应用开发中,权限控制是非常重要的一项功能,尤其是在应用中涉及到用户身份验证和对敏感信息的保护时。在PHP中,权限控制修饰符是一种常见的用于控制类、属性和方法访问权限的工具。本文将深入剖析PHP中各种权限控制修饰符的特点和...
    99+
    2024-01-19
    PHP 权限控制 修饰符
  • 探究PHP CLI和CGI的工作原理及异同点
    工作原理及异同点 在Web开发中,PHP是一种常用的编程语言,它可以通过不同的方式与Web服务器进行交互,其中最常见的是通过PHP CLI(Command Line Interface...
    99+
    2024-03-11
    cgi php cli php脚本
  • 如何理解操作系统中的Hosts文件工作原理和作用
    本篇内容介绍了“如何理解操作系统中的Hosts文件工作原理和作用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、什么是Hosts文件?Ho...
    99+
    2023-06-13
  • 如何理解线程池的工作原理
    本篇内容主要讲解“如何理解线程池的工作原理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解线程池的工作原理”吧!什么是线程池「小田螺」 勤勤恳恳,任劳任怨...
    99+
    2024-04-02
  • 如何深度剖析Java反射机制中的动态代理原理
    本篇文章给大家分享的是有关如何深度剖析Java反射机制中的动态代理原理,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。动态代理类原理 示例代码参见《Java反射机制剖析:简单谈谈...
    99+
    2023-06-17
  • 如何从Hotspot源码层面剖析java多态实现原理
    今天给大家介绍一下如何从Hotspot源码层面剖析java多态实现原理。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。C++是如何实现多态的多态的实现,现在几乎...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作