首页 > 编程知识 正文

jvm的运行原理及优化,jvm是什么意思

时间:2023-05-06 15:21:15 阅读:50607 作者:1512

JVM原理1 .简而言之,JVM是Javavirtualmachine(Java虚拟机)的缩写,通过在实际计算机上模拟各种计算机功能来实现。 它由字节码指令集、寄存器集、堆栈、垃圾回收和存储方法域等组成。 由于JVM会屏蔽有关操作系统平台的信息,因此Java程序只需要生成在Java虚拟机上运行的目标代码(字节码),就可以在各种平台上运行,而无需修改。 JVM在执行字节码时,实际上最终将字节码解释为特定平台上的机器指令来执行。

2.JRE、JDK、JVM的关系http://www.Sina.com/(javaruntimeenvironment,Java运行环境) :是Java平台,所有程序都必须在JRE下运行包括JVM、Java核心类库和支持文件。

33558 www.Sina.com/(javadevelopmentkit,Java开发工具包) :用于编译和调试Java程序的开发工具包。 包括Java工具(例如javac/java/jdb )和基于Java的类库(java API )。

33558 www.Sina.com/(javavirtualmachine,负责运行Java虚拟机兼容的类文件) :属于JRE的一部分并支持跨平台的虚构计算机。

3.JVM原理(1) JVM的基本概念

JVM由类加载子系统、运行时数据区、执行引擎和垃圾回收四部分组成。 其中,运行时数据区域(即,JVM的内存部分)包括方法区域(Method Area )、JAVA堆(Java Heap )、虚拟机堆栈(JVM Stack )、程序计数器和本地方法初始化器

)2) JVM启动过程JVM的启动分为以下4个步骤。

加载配置。 从当前路径或系统中查找jvm.cfg。

根据配置查找JVM.dll (主要实现JVM )。

初始化JVM以获取JNIEnv接口。 (这是JVM接口,findClass等操作由此实现。

找到并执行main方法。

)3) JVM内存结构

1 )类加载子系统(Class Loader )类加载器)负责加载. class文件,class文件在文件的开头有特定的文件标记,Class Loader负责加载class文件等

2 )运行时数据区的堆栈管运行,堆栈管存储。 JVM优化主要是优化Java堆和方法空间。

3 )方法区域(Method Area )方法区域是每个线程共享的内存区域,用于存储加载到JVM中的类信息、常量、静态变量和运行时常量池等数据。

运行时常量池是方法区域的一部分,用于存储编译器生成的各种文字和符号引用。 此部分在加载类后存储在方法空间的运行时常量池中。 运行时常量池比Class文件常量池更为动态,并且可以在运行时将新变量放入常量池中,而不是每次编译时都确定的常量。 主要运用是String类的intern ()方法。

4 ) Java堆(Java Heap ) Java堆是每个线程共享的内存区域,在JVM启动时创建。 该区域是JVM中最大的,是用于存储APP应用程序的对象和数组,也是GC的主要回收区域。 一个JVM实例只有一个堆内存,并且堆内存的大小是可调整的。 类加载器读取类文件后,必须将类、方法和常变量放在堆内存中,以便执行器容易执行。 堆内存分为新生代、老年和永久世代三部分。

JRE

Jdk1.6或更早版本:常量池已分配给永久世代。 Jdk1.7 :有,但正在走向永久一代。 Jdk1.8或更高版本:没有永久层代,而是使用元空间(Java.lang.out of memory error 3360 perm gen

内存溢出错误(如space )不出现在JDK1.8中)。 5 ) Java堆栈(JVM堆栈) Java堆栈是线程专用的,在创建线程时创建。 其生命周期是遵从线程的生命周期,线程结束后堆栈存储器也将被释放。 对堆栈来说没有垃圾回收问题,线程结束时该堆栈将溢出。 生命周期与线程匹配。 基本类型的变量和对象的引用变量被分配给函数的堆栈内存。

每次执行方法时都会创建堆栈帧,堆栈帧主要包含三种类型的数据。

局部变量表:输入参数和输出参数以及方法中的变量。 堆栈操作:记录堆栈和进入堆栈的操作。 堆栈帧数据:包括类文件、方法等。 堆栈中的数据都以堆栈帧的形式存在,堆栈帧是内存块,是数据集,是有关方法和运行时的数据的数据集。 调用每个方法直到执行完成的过程对应于从堆栈中的堆栈到离开堆栈的过程。

6 )本地方法堆栈(Native Method Stack )本地方法堆栈是JVM堆栈执行Java方法(字节码)的服务,而本地方法堆栈是JVM使用的nnvm 更具体地说,在本地方法堆栈中注册native方法,并在引擎运行时加载Native Liberies。

7 )程序计数器(程序计数器寄存器)程序计数器

是一块非常小的内存空间,几乎可以忽略不计,每个线程都有一个程序计算器,是线程私有的,可以看作是当前线程所执行的字节码的行号指示器,指向方法区中的方法字节码(下一个将要执行的指令代码),由执行引擎读取下一条指令。

8)执行引擎(Execution Engine)

执行引擎执行包在装载类的方法中的指令,也就是方法。执行引擎以指令为单位读取Java字节码。它就像一个CPU一样,一条一条地执行机器指令。每个字节码指令都由一个1字节的操作码和附加的操作数组成。执行引擎取得一个操作码,然后根据操作数来执行任务,完成后就继续执行下一条操作码。

(4)JVM垃圾回收

垃圾回收就是回收内存中不再使用的对象。所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象。而未使用中的对象(未引用对象),则没有被任何指针给指向,因此占用的内存也可以被回收掉。

垃圾回收基本步骤分两步:

查找内存中不再使用的对象(GC判断策略)。 释放这些对象占用的内存(GC收集算法)。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。