- 浏览: 280167 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
JQ_AK47:
谢谢你的ANT 五篇博文让我对Ant了解入门。
用Ant实现Java项目的自动构建和部署(4) -
lanluo:
这个源码,能给我一份吗?
自定义标签感想 -
mapeijie888:
google 翻译 用的不错
AMF使用简介 -
满分水:
如果有看到,讲解一下,谢谢!
IIs工作原理 -
满分水:
想了解一下IIS服务器是怎样与我们的web应用程序间交互的,终 ...
IIs工作原理
1.任何一门语言的开发都需要提供基本的架构对其支持,在java中提供的是一个JDK的类库,它是java运行的核心,是java运行的控制者,它产生程序运行所需要的结果,控制程序的走向,是所有指令和战略的执行中心,它提供java完整的解决方案。它是一套完整的体系结构,包括JVM(java虚拟机)、核心API、集成API、Java工具
。
2.JVM是JDK的最底层,对java程序进行解释和运行,负责与操作系统进行交互,用来屏蔽操作系统环境,提供一个完整的java运行环境。因此也就JAVA虚拟计算机。Java虚拟机有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。 每个JVM都有两种机制,一个是装载具有合适名称的类(类或是接口),叫做类装载子系统;另外的一个负责执行包含在已装载的类或接口中的指令,叫做运行引擎
JVM体系结构:
操作系统装入jvm是通过jdk中java.exe来完成,通过下面4步来完成jvm环境.
1.创建jvm装载环境和配置
2.装载jvm.dll
3.初始化jvm.dll并挂界到JNIENV(JNI调用接口)实例
4.调用JNIEnv实例装载并处理class类。
JVM:装入过程:
一.jvm装入环境,jvm提供的方式是操作系统的动态连接文件.既然是文件那就一个装入路径的问题,java是怎么找这个路径的呢?当你在调用java test的时候,操作系统会在path下在你的java.exe程序,java.exe就通过下面一个过程来确定jvm的路径和相关的参数配置了.下面基于windows的实现的分析. 首先查找jre路径,java是通过GetApplicationHome api来获得当前的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\Java RuntimeEnvironment\“当前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.主要的内容如下:
-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=1在控制台上测试. 最后获得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变量的CreateJavaVMGetDefaultJavaVMInitArgs函数指针变量上。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方法。
JVM的运行过程
发表评论
-
最JAVA网站,欢迎访问!
2011-03-19 22:01 1000最JAVA - JAVA编程 J2EE dhtmlx 数据库 ... -
hibernate3.5使用annotation实现双向一对多关联
2010-09-05 21:57 1401从Hibernate 2.5开始就可以使用annotatio ... -
强大的TcpServer压力测试工具源码(附突破连接限制的方法和工具)
2010-07-27 17:34 3998强大的TcpServer压力测试工具源码(附突破连接限制的方法 ... -
spring security 使用数据库管理资源
2010-07-02 17:04 2144使用spring security控制整个项目的权限访问。在数 ... -
jmesa 入门
2010-06-26 12:08 1620最近项目中需要用到jmesa分页,但在网上几乎没 ... -
Runtime类中的freeMemory,totalMemory,maxMemory等几个方法
2010-05-12 16:21 1545最近在网上看到一些人讨论到java.lang.Runtime ... -
用JSP实现基于Web的RSS阅读器(REMO)
2010-04-11 14:16 1264一 RSS介绍 根据维基百科(http ... -
RSS介绍
2010-04-11 14:07 1058一:什么是RSS RSS(really simple syn ... -
java去除字符串中的空格、回车、换行符、制表符
2010-03-18 10:33 5123java去除字符串中的空格、回车、换行符、制表符,本方法采用的 ... -
hibernate3连接池
2010-03-17 11:59 9261.Hibernate默认连接池<!---->&q ... -
Spring+Hibernate+Proxool连接池
2010-03-17 11:59 1244在applicationContext.xml同一级目录下新建 ... -
使自定标签支持EL表达式(${})
2010-01-18 13:48 1423要做下面两件事就可以达到目的了: 1 在tld文件如下配置 ... -
常用的WEB服务器介绍
2009-10-18 21:44 2054在UNIX和LINUX平台 ... -
JSTL 中的<c:catch>标签
2009-10-17 15:07 1663<c:catch>主要用来处理产生错误 ... -
插件技术原理介绍
2009-10-02 16:20 3212插件是一种遵循统一的预定义接口规范编写出来的程序 ... -
IIs工作原理
2009-08-12 17:29 2171引言 我查阅 ... -
Tomcat 服务器详解
2009-08-05 11:22 831Tomcat启动分析 1 - Tomcat Server的组成 ... -
Java 位运算符
2009-07-28 16:10 1368Java 定义的位运算(bitwise operators ) ... -
Java对象的初始化顺序
2009-07-13 11:42 993有这样的一段代码: p ... -
String类型对象是否改变
2009-07-13 11:23 1068因为String被设计成不可变(immutable)类, ...
相关推荐
常用jvm参数都在这张图中,参考起来方便,是国外大神整理的
- **JDK**和**JRE**都包含了**JVM**,使得Java程序能够在不同的环境中运行。 - **JVM**是Java的核心,负责字节码的执行。 3. **即时编译器(JIT)**: - **JIT**是**JVM**的一部分,它的主要作用是在运行时将字节...
这一机制负责将Java类文件加载到JVM中,使得程序能够运行。下面我们将详细探讨这一机制。 **1.1 什么是classloader?** classloader,即类加载器,是JVM的一部分,负责将编译后的Java字节码文件(.class文件)加载...
Java虚拟机(JVM)是Java程序运行的核心组件,它负责解释和执行字节码,为Java应用程序提供了一个跨平台的运行环境。《JAVA8虚拟机(jvm)规范_Chinese version》提供了关于JVM的详细中文指南,对于理解Java程序的运行...
JDK(Java Development Kit)包含了开发和运行Java程序所需的所有工具,包括JVM。当我们谈论"jdk,jvm源码"时,我们主要关注的是JVM的内部工作机制以及如何通过源码来理解这个过程。 JVM的运行机制主要包括以下几个...
Java 1.6 JDK 是Java开发工具包的一个版本,它为开发者提供了编译、调试和运行Java应用程序所需的所有工具。这个版本特别强调了对中文的支持,使得中文用户在使用过程中可以更加顺畅地阅读文档和理解API。JDK是Java ...
Java开发中的JDK、JRE和JVM是三个至关重要的概念,它们构成了Java应用程序的运行基础。理解这三个术语以及它们之间的关系是每个Java开发者必备的知识。 JDK(Java Development Kit)是Java开发工具包,它是Java开发...
在Java编程的世界里,JDK(Java Development Kit)、JRE(Java Runtime Environment)和JVM(Java Virtual Machine)这三个核心概念是不可或缺的基础知识。无论是对于初学者还是资深开发者而言,深入理解这三者之间...
JDK和JVM以及线程储存方面
JDK(Java Development Kit)是开发和运行Java应用程序的基础,它包括了Java编译器、Java虚拟机(JVM)、类库以及各种工具,使得开发者能够编写、测试和部署Java应用。 JDK 1.8是Java语言的一个重要里程碑,引入了...
Java JDK 1.5.0 安装和设置指南 Java 是一种流行的编程语言,它广泛应用于 Android 应用程序、Web 应用程序和桌面应用程序等领域。为了使用 Java开发应用程序,需要安装 Java 开发工具包(JDK),本文将指导您安装...
这个"java8 jdk1.8免安装包"是一个方便的版本,用户无需进行传统的安装过程,只需解压文件到指定位置,即可开始使用Java开发和运行环境。 首先,我们来详细了解一下JDK(Java Development Kit)。JDK是Java程序员...
Java JDK包含了许多组件,其中最重要的是Java编译器(javac)、Java解释器(java)、Java虚拟机(JVM)以及Java类库,这些使得开发者能够编写、编译、调试和运行Java应用程序。 1. **Java编译器** (javac): 它将源...
JDK 是开发和运行 Java 应用程序所需的一组工具和库的集合,包括 JRE(Java Runtime Environment)和开发工具。 JVM(Java Virtual Machine)是 JDK 的核心组成部分,它负责执行字节码,提供了一个“一次编写,到处...
JDK(Java Development Kit)包含了开发和运行Java应用程序所需的所有工具和库,包括Java虚拟机(JVM)、编译器(javac)、类库以及调试器(jdb)等。这个版本的编号为8u202,"u"代表更新(update),意味着它是Java...
JRE(Java Runtime Environment)是运行Java应用程序所必需的环境,它包含了JVM以及运行Java应用程序所需的库文件和其他资源。JRE的主要组成部分包括: 1. **JVM**:如前所述,JVM是JRE的核心组件,负责执行Java...
JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。 jdk1.8新特性 1)Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可。 2)新增lambda表达式 3)提供...
在Java JDK中,最重要的组件是Java编译器(javac)、Java虚拟机(JVM)和Java类库。首先,让我们深入了解这些核心组成部分: 1. **Java编译器(javac)**:它是Java程序从源代码到字节码转换的关键工具。当你编写完`....
初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧,JDK(Java Development Kit)简单理解是Java开发工具包,JRE(Java Runtime Enviroment)是Java的运行环境,JVM( java virtual machine)也...