如何启动JAVA里的JVM?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何启动JAVA里的JVM?相关的知识,希望对你有一定的参考价值。

方法如下:

1、虚拟机的启动入口位于share/tools/launcher/java.c的main。

2、配置JVM装载环境。

3、解析虚拟机参数。

4、设置线程栈大小。 

5、执行Java main。

配置JVM装载环境的方法:

1、Java代码执行时需要一个JVM环境,JVM环境的创建包括两部分:JVM.dll文件的查找和装载,我们来看一段Jre通过环境的路径和系统版本寻找jvm.cfg文件的代码。

说明: 
1)GetJREPath()查找当前JRE环境的所在路径。


2)ReadKnownVms()读取JRE路径\\lib\\ARCH(CPU构架)\\JVM.cfg文件,其中ARCH(CPU构架)通过GetArch方法获取,在window下有三种情况:amd64、ia64和i386。 


3)CheckJvmType确定当前JVM类型,先判断否通过-J、-XXaltjvm=或-J-XXaltjvm=参数指定,如果没有,则读取JVM.cfg文件中配置的第一个类型。


4)GetJVMPath根据上一步确定的JVM类型,找到对应的JVM.dll文件。

参考技术A JVM是java的虚拟机,是一个解释字节码文件的解释器;假如你成功启动了一个java程序,那么它的第一步就是由JVM将程序的class文件解释为机器能够识别的指令。换言之,JVM无需自行启动

当使用 Java 命令运行 .class 文件的时候,就相当于启动了一个 JVM 进程,如何理解?

请教各位大佬,这里说的启动了一个JVM进程,这个进程和操作系统进程是一个意思么?

我不太理解jvm当中具体有哪些进程,望解答。谢谢。

进程是操作系统资源管理的基本单位,运行.class文件和打开一个应用软件(当然有些软件可能对于多个进程)是类似的,都会创建一个操作系统进程。

你提到的"运行.class启动的JVM进程",实际上这个就是操作系统创建的进程;这个进程需要一定的资源(CPU、内存、磁盘等)来完成一定的事情,进程之间不会相互干扰,所以每个软件都需要操作系统分配进程。

至于你说的"JVM中有哪些进程",我理解应该是"JVM中有哪些"线程;建议去了解一下进程和线程之间的区别。我个人理解进程和线程的核心区别是:进程是资源管理、分配的基本单位,这个类比于公司;而线程是操作系统调度的基本单位,类比于公司员工。上级部门在分配资源的时候肯定是分配名额到企业,但是分配资源具体怎么使用,则需要由企业的员工来完成。

一般JVM中的线程由用户创建,但是JVM也会默认创建一些线程,比如垃圾回收线程。

参考技术A 你运行一个main方法的时候 会启动一个java进程 编译解析.class文件 main函数是java规范,你可以理解它就是应用程序的入口

以上是关于如何启动JAVA里的JVM?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置jvm启动参数

当使用 Java 命令运行 .class 文件的时候,就相当于启动了一个 JVM 进程,如何理解?

如何设置JVM参数

JVM垃圾回收1(如何寻找垃圾?)

如何查看JVM的扩展参数

如何设定tomcat启动时JVM内存大小