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

Java基础八股复习3 jvm-内存结构

  1. 简述对象创建的过层
    1)首先会进行检查类的信息,保证类的内部方法和属性准备完成,评估需要占用内存大小
    2)然后会在堆内存中给对象划分一处区域
    3)对对象的属性进行初始化,数字为0,字符串为null,boolean为false
    4)设置对象头信息,包含哈希值、锁的状态、gc年龄等
    5)通过构造方法对对象属性进行赋值

  2. jvm的内存区域包含哪些
    内存主要分为程序计数器、虚拟机栈、本地方法栈、堆、元空间

程序计数器、虚拟机栈、本地方法栈是线程隔离的,堆和元空间是线程共享的

1)java代码编译后会生成对应的字节码指令,jvm就是通过字节码指令执行代码
2)字节码指令存在元空间中
3)程序计数器中会存储这些字节码指令的地址,在代码执行时,通过计数器获取下一行代码对应的字节码指令地址,找到对应的字节码指令并执行
4)本地方法栈存的是一些本地方法
5)堆主要存放的是对象、数组和字符串常量池,对象的创建和回收都在堆内完成
6)元空间主要存储类的各种信息,比如方法、属性、注解、常量、静态变量等,还有类编译生成的字节码也存在元空间
7)虚拟机栈:
每执行一个方法,就会在虚拟机栈中生成一个栈帧
首先会从堆的字符串常量池或者元空间的常量池中将定义写入操作数栈
然后将结果存入局部变量表
判断如果有动态链接(其实就是方法调用),会根据链接找到方法执行的字节码命令的地址,用来使下一次执行跳转到对应的方法(修改程序计数器中下一行指令地址为动态链接指向的方法的字节码指令的地址)
执行完方法后,从方法出口里获取调用该方法的下一条指令的地址,从方法中出来执行下一条指令
如果代码中有异常,从异常表中获取 (起始指令地址-存的是try/catch里异常体第一行代码的指令地址、结束指令地址-存的是try/catch里异常体最后一行代码的指令地址、跳转指令地址-存的是异常处理catch里第一行代码的指令地址)

  1. 总结:
    jvm执行java方法时
    1-jvm首先会从程序计数器中获取第一行代码的指令地址,根据地址从元数据获取指令执行
    2-从元数据/堆中获取赋值,存到操作数栈中
    3-将计算后的值存入局部变量表
    4-如果有方法调用,从动态链接中获取需要进入对象的第一行代码的指令,替换到程序计数器中,执行,进入方法,将调用方法的下一行指令地址存到方法出口
    5-方法执行完后,获取方法出口中存储的下一行指令地址,从元数据找到指令并执行
    6-如果有异常处理try/catch,会将try第一行代码的字节码指令地址存到程序计数器、最后一行存到计数器,如果有异常,将catch中的代码指令地址写入程序计数器,执行的时候再从元数据获取数据值-写入操作数栈-出栈写入局部变量表,重复操作
    7-当前方法的栈帧结束,清空局部变量表
http://www.dtcms.com/a/337129.html

相关文章:

  • 数据仓库理论
  • 具身智能2硬件架构(人形机器人)摘自Openloong社区
  • Vue3 中使用 Element Plus 完整指南
  • 博客项目 Spring + Redis + Mysql
  • 利用DeepSeek辅助WPS电子表格ET格式分析
  • 代码随想录算法训练营四十五天|图论part03
  • flask——4:请求与响应
  • 机器学习(决策树)
  • pytest的前置与后置
  • 决策树:机器学习中的直观分类与回归工具
  • CPTS---Active 复现
  • Python netifaces 库详解:跨平台网络接口与 IP 地址管理
  • Alma Linux 8 中解决掉 Failed to set locale, defaulting to C.UTF-8
  • vue3入门-v-model、ref和reactive讲解
  • Flink Stream API - 源码开发需求描述
  • Apache IoTDB集群部署实战:1C2D架构的高性能时序数据库搭建与优化指南
  • Claude Code 代理商汇总:2025年最新评测
  • 【Vivado TCL教程】从零开始掌握Xilinx Vivado TCL脚本编程(一)
  • 【Jenkins】03 - 自动构建和docker构建
  • 在 CentOS 7 上使用 LAMP 架构部署 WordPress
  • 制作全流程对比:侗家灰水粽VS布依族草灰粽的8道工序差异
  • 大厂 | 华为半导体业务部2026届秋招启动
  • scikit-learn/sklearn学习|弹性网络ElasticNet解读
  • 机器学习-决策树:从原理到实战的机器学习入门指南
  • 大模型的底层运算线性代数
  • 实现自学习系统,输入excel文件,能学习后进行相应回答
  • 香港服务器是否支持RAID磁盘阵列?
  • RTSP 播放器 vs RTMP 播放器:延迟对比与技术实践
  • HAProxy使用方法以及和LVS区别
  • 【数据库】Navicat 导入 Excel 数据乱码问题的解决方法