当前位置: 首页 > news >正文

Java学习------初识JVM体系结构

1. 介绍

JVM对应的是一套规范,然后不同公司根据这个规范有着不同的实现。例如:

  1. HotSpot: 这个是由Oracle公司开发的,也是目前最常用的虚拟机实现,是默认的Java虚拟机,包含在Oracle JDK和OpenJDK中
  2. JRockit: 同样也是由Oracle公司开发,能够提供高性能和可伸缩性
  3. IBM JDK: 是由IBM公司开发的,相比于上面的HotSpot,它能够提供更小的内存占用和更快的启动时间

当然还有着很多的实现,感兴趣的可以去搜索了解一下。在这个网址JVM虚拟机规范中,可以对这些规范做个更进一步的了解。对于开发来说,下图中的运行时数据区需要着重的了解。
在这里插入图片描述
这几个英文名词对应的功能分别为:

名词功能
The pc Register程序计数器:一块较小的内存空间,记录的是正在执行的虚拟机字节码指令的地址
Java Virtual Machine StacksJava虚拟机栈: 用于存储栈帧。而栈帧又是用来存储局部变量表、操作数栈等信息
Heap堆:Java虚拟中最大的一块内存,用于存放Java对象实例和数组。是垃圾收集器收集垃圾的主要区域
Method Area方法区: 用于存储已经被虚拟机加载的类、常量、静态变量等数据
Run-Time Constant Pool运行时常量池: 是方法区中的一部分,用于存放编译期生成的字面量和符号引用
Native Method Stacks本地方法栈: 在本地方法执行时,会使用到本地方法栈。和Java虚拟机栈十分相似

注意:这里只是JVM规范,但是各个厂商在实现这一规范时,可能会对其中的一些功能做些改变

2. 不同JDK版本下的HotSpot

2.1 JDK6的HotSpot

JDK6的HotSpot的大致图像
说明:

  • 年轻代:刚new出来的对象放的区域
  • 老年代:垃圾回收后仍然存活的对象
  • 这个时候的永久代和堆是相邻的,使用连续的物理内存,但是内存空间是隔离的
  • 永久代的垃圾收集是和老年代捆绑在一起的,因此无论谁满了,都会触发永久代
    和老年代的垃圾收集

2.2 JDK7的HotSpot

JDK7的HotSpot的大致图像
这里要和JDK6的HotSpot结合起来看,是将原先的类的静态变量和字符串常量池移动到堆中,再将符号引用移动到本地内存中,其他保持不变。属于一个过渡版本,重点还是在下面的JDK8的HotSpot

2.3 JDK8之后的HotSpot

JDK8之后的HotSpot的大致图像
同样的也是结合之前的进行对比,这里将原先的整个方法区都移动到了本地内存中,并且将原先的永久代改为元空间。这种改变主要是为了避免OOM错误的发生。

相关文章:

  • 格雷码.
  • YOLOV8添加ASPP改进
  • Pyhon第五章01:函数的定义和练习
  • Qt 控件概述 QWdiget 1.1
  • 运维面试题(四)
  • C++|范围for
  • OpenCV基础知识
  • 分类操作-06.根据id删除分类
  • JS基础部分
  • 奇安信二面
  • 北京大学第六弹:《DeepSeek应用场景中需要关注的十个安全问题和防范措施》
  • 【论文阅读】Adversarial Patch Attacks on Monocular Depth Estimation Networks
  • 硬件地址反序?用位操作为LED灯序“纠偏”。反转二进制数即可解决
  • TCP/IP协议中三次握手(Three-way Handshake)与四次挥手(Four-way Wave)
  • 2025年跨网文件交换系统推荐:安全的内外网文件传输系统Top10
  • 01-1 音视频知识学习(音频)
  • 【Java代码审计 | 第十四篇】MVC模型、项目结构、依赖管理及配置文件概念详解
  • 九、Prometheus 监控windows(外部)主机
  • How To Change Windows VPS Password
  • 【k8s001】K8s架构浅析
  • 五一假期首日,上海外滩客流超55万人次
  • 王毅谈金砖国家开展斡旋调解的经验和独特优势
  • 中国代表:美“对等关税”和歧视性补贴政策严重破坏世贸规则
  • 国台办:“台独”是绝路,外人靠不住
  • 从孔雀尾巴到蒙娜丽莎,一个鸟类学博士眼中的“美”
  • 上海“模速空间”:将形成人工智能“北斗七星”和群星态势