JVM结构

简介: JVM可谓是Java语言的重中之重,可以说逢考必问,今天来整理一下

整个虚拟机结构

虚拟机由以下四个部分组成。类加载器、执行引擎、native接口、运行时数据区(堆栈内存这些)这里借用网上的一个图就可以一目了然

image.png

  1. 类加载器,主要复制加载磁盘中的class文件,将文件通过类加载器加载、验证、准备、解析、初始化到内存中。
  2. 运行时数据区,就是我们常见的八股文,堆了栈了相关的
  3. 执行引擎,执行引擎主要用来执行Java生成的字节码,解析/编译成各种cpu 所能执行的二进制指令。简单来说,JVM 中的执行引擎充当了将高级语言翻译为机器语言的译者。



运行时数据区

  • 线程共享
  • 存放new出的对象
  • 静态变量的值
  • 字符串常量池
  • 方法区、永久代(JDK1.8后改为元空间,在直接内存中)
  • 存放常量
  • 字节码文件
  • 线程不共享
  • 本地方法栈
  • 存放native方法(C语音实现的底层方法)
  • 虚拟机栈
  • 存放临时变量
  • 程序计数器
  • 每个线程一块内存,指向当前正在执行的字节码的行号。
  • 如果当前线程是native方法,则其值为null。


JVM内存结构易错点

  • 静态变量存在堆中,变量引用存在方法区,值在堆
  • Java语言只有值传递,子方法中的引用存在栈中,对象存在堆中
  • 常量池存放在堆中
  • JDK1.7之前常量池是存放在永久代(hotspot虚拟机对方发区的实现)中 ,方法区与堆是独立的
  • JDK1.7字符串常量池从永久代中移到了堆内存中,属于堆内存的一部分。
  • JDK1.8移除了永久代并由元空间(metaspace)代替,存放在本地内存(native space)中。并没有对常量池再做变动。即常量池一直在堆中
  • 为什么用元空间替换永久代
  • 元空间在直接内存,最大限度避免oom
  • 在方法中声明的基本数据类型局部变量存储在栈上,在类中声明的基本数据类型存储在堆上


JVM指针压缩

  1. 使用压缩指针可以在64位系统中利用32位的对象引用获得超过4G的内存寻址空间。
  2. Java对象存储存在对齐补充(对象占用的空间必须是8的倍数),后三位都为000,所以将000去掉存储,寻址时通过左移三位恢复
  3. JVM虽然额外的执行了一些位运算但是极大的提高了寻址空间,并且将对象引用占用内存大小降低了一半,节省了大量空间。况且这些位运算对于CPU来说是非常容易且轻量的操作





相关文章
|
24天前
|
存储 算法 Java
聊聊jvm的内存结构, 以及各种结构的作用
【10月更文挑战第27天】JVM(Java虚拟机)的内存结构主要包括程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区和运行时常量池。各部分协同工作,为Java程序提供高效稳定的内存管理和运行环境,确保程序的正常执行、数据存储和资源利用。
46 10
|
4月前
|
存储 算法 安全
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
70 0
|
1月前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
41 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
3月前
|
存储 算法 Java
JVM组成结构详解:类加载、运行时数据区、执行引擎与垃圾收集器的协同工作
【8月更文挑战第25天】Java虚拟机(JVM)是Java平台的核心,它使Java程序能在任何支持JVM的平台上运行。JVM包含复杂的结构,如类加载子系统、运行时数据区、执行引擎、本地库接口和垃圾收集器。例如,当运行含有第三方库的程序时,类加载子系统会加载必要的.class文件;运行时数据区管理程序数据,如对象实例存储在堆中;执行引擎执行字节码;本地库接口允许Java调用本地应用程序;垃圾收集器则负责清理不再使用的对象,防止内存泄漏。这些组件协同工作,确保了Java程序的高效运行。
27 3
|
3月前
|
存储 安全 Java
JVM内存结构
这篇文章详细介绍了Java虚拟机(JVM)的内存结构,包括类的加载过程、类加载器的双亲委派机制、沙箱安全机制、程序计数器、Java栈、Java堆、本地方法和本地方法栈等关键组件及其作用。
JVM内存结构
|
3月前
|
C# UED 开发者
WPF动画大揭秘:掌握动画技巧,让你的界面动起来,告别枯燥与乏味!
【8月更文挑战第31天】在WPF应用开发中,动画能显著提升用户体验,使其更加生动有趣。本文将介绍WPF动画的基础知识和实现方法,包括平移、缩放、旋转等常见类型,并通过示例代码展示如何使用`DoubleAnimation`创建平移动画。此外,还将介绍动画触发器的使用,帮助开发者更好地控制动画效果,提升应用的吸引力。
171 0
|
3月前
|
存储 监控 算法
深入解析JVM内部结构及GC机制的实战应用
深入解析JVM内部结构及GC机制的实战应用
|
4月前
|
存储 运维 Java
Java面试题:JVM的内存结构有哪些主要部分?请简述每个部分的作用
Java面试题:JVM的内存结构有哪些主要部分?请简述每个部分的作用
58 9
|
4月前
|
存储 设计模式 监控
Java面试题:简述JVM的内存结构,包括堆、栈、方法区等。栈内存优化的方法有 哪些?
Java面试题:简述JVM的内存结构,包括堆、栈、方法区等。栈内存优化的方法有 哪些?
47 0
|
4月前
|
存储 算法 Java
Java面试题:解释JVM的内存结构,并描述堆、栈、方法区在内存结构中的角色和作用,Java中的多线程是如何实现的,Java垃圾回收机制的基本原理,并讨论常见的垃圾回收算法
Java面试题:解释JVM的内存结构,并描述堆、栈、方法区在内存结构中的角色和作用,Java中的多线程是如何实现的,Java垃圾回收机制的基本原理,并讨论常见的垃圾回收算法
65 0