news 2026/7/14 13:45:08

JVM面试杂知识

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JVM面试杂知识

String s = new String(“abc”)执行过程中分别对应哪些内存区域?

1. 元空间 (Metaspace)

在代码执行前,JVM 需要加载String类和包含这行代码的类。

  • 动作:类加载器将类的结构信息(方法、字段定义)、运行时常量池存入元空间。
  • 存储内容String类的模板信息,以及字节码指令。
2. 堆:字符串常量池 (String Constant Pool)

执行到"abc"这个字面量时:

  • 动作:JVM 会先检查字符串常量池中是否存在内容为"abc"的对象。
  • 存储内容:如果池中没有,则在堆的字符串常量池区域创建一个"abc"对象实例。如果已经存在,则直接复用。
3. 堆:普通对象区域 (Java Heap)

执行到new String(...)时:

  • 动作:无论常量池中是否已有"abc"new关键字都会强制在堆的普通对象区域(非池化区域)开辟一块新内存。
  • 存储内容:创建一个全新的String对象实例。这个对象的内部value属性会指向刚才常量池中"abc"对象的底层数组。
4. 虚拟机栈 (JVM Stack)

执行到String s和赋值操作=时:

  • 动作:在当前线程方法的栈帧中,为局部变量s分配空间。
  • 存储内容:将堆中新创建的String实例的内存地址存入局部变量表的s变量中。
5. 程序计数器 (Program Counter)

在整个执行过程中:

  • 动作:程序计数器不断更新,指向ldc(从常量池加载)、new(分配内存)、invokespecial(调用构造函数)、astore(存入局部变量)等字节码指令的偏移量。

方法区/元空间 中方法执行过程

1.找到元空间中该方法的定义
2.根据定义在虚拟机栈中创建栈帧
3.程序计数器中创建对应计数器
4.线程执行
5.执行完退出,清理该方法栈帧,恢复计数器为调用前位置


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 13:45:09

Visio中高效插入与编辑矩阵公式的完整指南

1. Visio中插入矩阵公式的基础操作 第一次在Visio里插入矩阵公式时,我盯着工具栏找了半天都没发现"公式编辑器"的入口。后来才发现,Visio处理公式的方式和其他Office软件不太一样——它需要借助外部公式工具。这里我把自己摸索出来的完整流程拆…

作者头像 李华
网站建设 2026/7/14 13:45:08

嵌入式视觉图像API:内存可控的实时图像处理规范

1. 图像处理API手册:面向嵌入式视觉系统的完整接口规范嵌入式机器视觉系统在工业检测、智能安防、机器人导航等场景中日益普及,其核心挑战在于如何在资源受限的MCU或SoC平台上实现高效、灵活且可复用的图像处理能力。本手册所描述的image模块并非通用图像…

作者头像 李华
网站建设 2026/7/14 13:45:10

在Java中什么是指令重排序

指令重新排序是编译器或处理器在不改变单线程序语义的情况下调整指令实际执行顺序以提高执行效率的行为。它本身不是错误,而是现代软硬件协调优化的必然结果;但一旦进入多线程环境,缺乏同步机制,可能会导致变量读取混乱、逻辑故障…

作者头像 李华
网站建设 2026/7/14 13:45:27

Arduino控制VESC电机控制器的通信协议与库开发

1. VESC电机控制器Arduino库技术解析与工程实践1.1 项目定位与工程价值VESC( Vedder Electronic Speed Controller)是由Benjamin Vedder开发的开源无刷电机控制器,其硬件设计基于STM32F405RG微控制器,固件支持FOC(磁场…

作者头像 李华