我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何剖析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工作原理和特点了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

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

下载Word文档

猜你喜欢

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

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

JVM工作原理和特点是什么

本篇文章给大家分享的是有关JVM工作原理和特点是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。我们运行和调试Java程序的时候,经常会提到一个JVM的概念,这里向大家描述一
2023-06-17

HTTP协议的特点和工作原理是什么

本篇内容介绍了“HTTP协议的特点和工作原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、HTTP简介1、简介HTTP超文本传输协
2023-07-02

深入剖析Python递归函数的工作原理和实际应用

深入解析Python递归函数的原理与应用一、引言递归函数在计算机科学中是一种常见而强大的工具。它允许函数在自身内调用,通过重复调用自身来解决问题。Python作为一门强大的编程语言,其递归函数在处理一些问题时表现出了出色的性能和简洁性。本
深入剖析Python递归函数的工作原理和实际应用
2024-02-02

Golang中接口的工作原理和特性深入解析

探索Golang中接口的实现原理与特性引言:Golang是一种现代化的编程语言,凭借其简洁性、高效性和强大的并发支持而受到广泛关注。其中,接口是Golang中一个重要的特性,使得代码能够更加灵活、可扩展和易于维护。本文旨在深入探索Gola
Golang中接口的工作原理和特性深入解析
2024-01-24

深入浅出ASP数据缓存:剖析其工作原理和应用技巧

ASP数据缓存是一种高效的缓存机制,可显著提升Web应用程序的性能。深入解析了ASP数据缓存的工作原理,并提供了丰富的应用技巧,以帮助开发者充分利用缓存机制,优化应用程序的性能。
深入浅出ASP数据缓存:剖析其工作原理和应用技巧
2024-02-04

如何深入分析Spring MVC工作原理

这篇文章将为大家详细讲解有关如何深入分析Spring MVC工作原理,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Spring MVC框架介绍Spring MVC属于SpringFrameW
2023-06-05

如何理解操作系统中的Hosts文件工作原理和作用

本篇内容介绍了“如何理解操作系统中的Hosts文件工作原理和作用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、什么是Hosts文件?Ho
2023-06-13

SAP Fiori编程模型规范里如何进行@ObjectModel.readOnly工作原理解析

本篇文章为大家展示了SAP Fiori编程模型规范里如何进行@ObjectModel.readOnly工作原理解析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。SAP官网的ABAP Programm
2023-06-04

云服务器如何做账务处理工作内容和方法分析

数据备份和恢复云服务器提供了高可用性和弹性的服务,但是一旦服务器出现故障,可能会导致数据丢失或数据泄露等问题。因此,云服务器需要具备数据备份和恢复功能,以保证服务器在出现故障时能够快速恢复数据,避免损失。数据备份可以通过外部存储设备进行,例如云硬盘或云服务器自带的备份系统,而恢复则需要使用专门的软件和工具,例如备份软件
云服务器如何做账务处理工作内容和方法分析
2023-10-28

云服务器如何做账务清理工作内容和方法分析

一、账务清理的重要性账务清理是企业管理中不可或缺的一环,它是企业内部控制的重要手段,可以帮助企业合理管理资产和费用,提高财务信息的准确性和透明度。在实际工作中,账务清理能够起到以下几个方面的作用:规范企业财务管理:账务清理可以规范企业的财务管理行为,提高财务信息的准确性和透明度,为企业决策提供有效的支持。保障企业资产安
云服务器如何做账务清理工作内容和方法分析
2023-10-28

PHP中的过滤器(Filter)是如何工作的?(请解释PHP中过滤器的使用场景和工作原理。)

PHP中的过滤器是一种验证、清理和转换数据的强大工具。它们通过过滤器链逐个应用过滤器来工作,每个过滤器执行特定操作。过滤器在各种场景下使用,包括表单验证、数据清理、安全过滤和数据转换。它们易于使用、高效且可靠,并提供了一组预定义的规则和函数,简化了数据处理过程。最佳实践包括选择适当的过滤器、使用过滤器链、检查错误、自定义过滤器和避免过度过滤。
PHP中的过滤器(Filter)是如何工作的?(请解释PHP中过滤器的使用场景和工作原理。)
2024-04-02

云服务器如何做账务处理工作内容和方法分析报告

账务处理工作内容创建和管理账目管理系统的用户账户管理系统的账目报表更新系统的账目报表备份系统的账目报表账务处理方法在云服务器上创建账目将账目数据上传到云服务器上在云服务器上创建账目数据的备份更新系统账目报表更新账目数据备份账目报表更新账目数据账务处理步骤创建账目上传账目数据到云服务器上创建账目数据的备份更新系统账目报表更新账目数据备份账目报表更新账目数据更新系统账目报表备份账目报表需要注意的是,在...
2023-10-27

云服务器如何做账务清理工作内容和方法分析报告

清理账目:云服务器提供商会为客户提供一份详细的账单,包括客户的支出、收入和开支情况。客户需要仔细查看账单,并确定哪些支出是必要的,哪些支出是可有可无的。通过清理账目,客户可以清楚地了解自己的财务状况,以及未来的财务计划。审查费用:云服务器提供商会审查客户的费用。这可能包括审查客户的服务器租赁费用、存储空间费用、数据迁移费用等等。通过审查费用,客户可以确定自己需要支付的费用,并了解哪些费用是不必要的...
2023-10-27

Xunsearch全文搜索引擎的工作原理与优势分析(Xunsearch是如何实现高效全文搜索的?)

Xunsearch全文搜索引擎通过文档分词、词元索引、评分计算和结果排序实现高效搜索。其优势包括高效搜索、可扩展性强、灵活定制、支持多种数据源、丰富功能和开源免费。Xunsearch采用倒排索引结构、分布式架构和高效查询执行算法等技术来实现高性能。
Xunsearch全文搜索引擎的工作原理与优势分析(Xunsearch是如何实现高效全文搜索的?)
2024-04-02

Java中的JDBC是如何连接和操作数据库的?(请解释Java数据库连接(JDBC)的工作原理及其用法。)

JDBC工作原理:加载JDBC驱动程序,建立与数据库连接,创建SQL语句,执行SQL语句,处理结果或更新,关闭连接。JDBC用法:导入JDBC包,注册驱动程序,建立连接,创建SQL语句,执行语句,处理结果/更新,关闭连接。示例:连接MySQL数据库并查询数据:导入JDBC包,建立连接,创建SQL语句,执行并处理结果。优势:数据库独立性,标准化接口,广泛使用,易于使用。
Java中的JDBC是如何连接和操作数据库的?(请解释Java数据库连接(JDBC)的工作原理及其用法。)
2024-04-02

PHP中的Smarty模板引擎是如何工作的?(请解释Smarty模板引擎在PHP中的应用和原理。)

Smarty是一个PHP模板引擎,将模板文件和业务逻辑分离。原理:它解析模板文件,将模板编译为PHP代码,分配值并呈现模板。应用包括页面布局、动态内容、缓存和可重用组件。优势:清晰的分离、可重用性、缓存和安全性。例如,一个Smarty模板可以包含页面布局,而PHP文件可以分配数据并呈现模板,生成最终的HTML输出。
PHP中的Smarty模板引擎是如何工作的?(请解释Smarty模板引擎在PHP中的应用和原理。)
2024-04-02

PHP中的命名空间和自动加载机制是如何工作的?(请解释PHP命名空间和自动加载的原理。)

PHP命名空间用于组织代码,避免命名冲突,而自动加载机制则自动加载类和接口。命名空间使用反斜杠表示,例如namespaceMyAppModels;。自动加载函数使用spl_autoload_register()注册,并根据类名确定文件位置。命名空间和自动加载协同工作,简化代码管理、避免冲突、提高可读性和性能。
PHP中的命名空间和自动加载机制是如何工作的?(请解释PHP命名空间和自动加载的原理。)
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录