大数据开发:看了都说好的JVM分析
作者头像
  • 赵晨辰
  • 2021-02-01 19:19:10 0

一、JVM是什么

JVM是Java虚拟机的简称,它通过模拟各种计算机功能来实现跨平台运行。其主要组成部分包括堆、方法区、栈、本地方法栈和程序计数器。其中,方法区和堆是所有线程共享的区域,而栈、程序计数器和本地方法栈则归属于JVM管理。Java之所以能够实现“一次编写,到处运行”,主要是因为它屏蔽了操作系统平台的具体细节,只需生成适用于JVM的字节码即可在不同平台上运行。

二、JVM的总体概述

JVM主要由类加载器(ClassLoader)、运行时数据区、执行引擎和垃圾回收四个部分组成。其中,运行时数据区涵盖了JVM的主要内存部分,包括方法区、Java堆、虚拟机栈、程序计数器和本地方法栈。

三、JVM的体系结构

1. 类加载器

类加载器负责加载.class文件。这些文件开头有特定的标识符,类加载器还负责文件的加载过程,但是否可以执行则由执行引擎决定。

2. 运行时数据区

运行时数据区主要包括栈和堆。栈主要用于方法的执行,而堆则用于存储对象和数组。JVM调优主要是针对Java堆和方法区进行优化。

3. 方法区

方法区是线程共享的内存区域,存储着已加载的类信息、常量、静态变量以及运行时常量池等数据。

4. Java堆

Java堆是线程共享的内存区域,JVM启动时创建。Java堆是JVM中最大的内存区域,用于存储对象和数组。当Java堆空间不足时,程序会抛出OutOfMemoryError异常。Java堆分为新生代、老年代和永久代。需要注意的是,从JDK 1.8开始,永久代已经被元空间取代。

四、JVM的内存空间

JVM的内存空间包括方法区、Java堆、Java栈和本地方法栈。方法区是线程共享的区域,用于存储类信息、常量和静态变量。Java堆也是线程共享的区域,用于存储对象和数组。如果Java堆空间不足,程序会抛出OutOfMemoryError异常。Java栈是每个线程私有的区域,其生命周期与线程相同。本地方法栈用于执行本地方法,PC寄存器用于控制程序指令的执行顺序。

五、JVM的基本特性

1. 基于栈的虚拟机

JVM是一种基于栈执行的虚拟机,不同于Intel x86和ARM等基于寄存器的架构。

2. 符号引用

除基本类型外的所有Java类型(类和接口)都通过符号引用关联,而不是基于内存地址的引用。

3. 垃圾回收机制

JVM通过垃圾回收机制自动销毁不再使用的对象。

4. 平台无关性

JVM通过明确地定义基本类型的字节长度来保证代码的平台无关性。

5. 网络字节序

Java class文件的二进制表示采用网络字节序(大端模式),以确保跨平台兼容性。

六、JVM的实现原理

1. 类加载器

类加载器负责加载.class文件,执行与否由执行引擎决定。JVM内置了启动类加载器和用户自定义类加载器。

2. 本地方法栈

本地方法栈主要用于登记和加载本地方法库。

3. 栈

栈是线程私有的内存区域,用于存储方法的局部变量和操作栈。栈不存在垃圾回收问题,因为线程结束后栈也随之释放。

4. 程序计数器

程序计数器用于记录当前执行的指令,是一个较小的内存空间。

5. 方法区

方法区是线程共享的区域,存储已加载类的元数据信息。

6. Java堆

Java堆用于存储对象实例,垃圾回收机制会定期回收不再使用的对象。

7. 本地接口

本地接口允许Java程序与C/C++等其他语言进行交互,通过本地方法栈登记和加载本地方法库。

    本文来源:图灵汇
责任编辑: : 赵晨辰
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
说好分析数据开发JVM
    下一篇