码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 当new一个对象时在JVM中会有哪些操作


    目录

    首先我们了解一下虚拟机(JVM)的内存分布

    类加载机制

    1、加载

    2、连接?

    3、初始化


    首先我们了解一下虚拟机(JVM)的内存分布

    程序计数器(program count register):当前线程所执行的字节码的行号指示器(每个线程一个计数器,互不影响)

    本地方法栈是jvm调用操作系统方法所使用的栈。

    虚拟机栈是存储局部变量表、操作栈、动态链接、方法出口等信息

    方法区存放了一些常量、静态变量、类信息等,可以理解成class文件在内存中的存放位置。

    虚拟机堆是存储对象和数组,所有线程共享的一块内存区域

    类加载机制

    JVM把class文件加载到内存,并对数据进行校验、解析和初始化,最终形成JVM可以直接使用的java类型的全过程。

    1、加载

    将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区中的运行时数据结构,在堆中生成一个代表这个类的java.lang.Class对象,作为方法区类数据的访问入口,这个过程需要类加载器参与

    存在继承时:
    原则:先静后非,先父后子,先块后器
    执行顺序如下:
    第一步:父类静态成员变量(方法区)
    第二步:父类静态代码块(多个按照顺序执行)
    注意:根据静态代码块和变量位置顺序初始化变量
    第三步:子类静态成员变量(方法区)
    第四步:子类静态代码块

    2、连接

    • 验证:确保Class文件中字节流包含的信息是否符合虚拟机的要求,保证不会危害虚拟机自身的安全
    • 准备:正式为类变量(static变量)分配内存并设置类变量初始值的阶段,这些内存都将在方法区中进行分配
    • 解析:虚拟机将常量池中的符号引用替换为直接引用的过程

    方法区:

    1. 常量池(Constant Pool):常量池数据编译期被确定,是Class文件中的一部分。存储了类、方法、接口等中的常量,当然也包括字符串常量。

    2. 字符串池/字符串常量池(String Pool/String Constant Pool):是常量池中的一部分,存储编译期类中产生的字符串类型数据。

    3. 运行时常量池(Runtime Constant Pool):方法区的一部分,所有线程共享。虚拟机加载Class后把常量池中的数据放入到运行时常量池。

    3、初始化

    1. 当使用new创建一个对象时,jvm会在堆中分配一个内存存放该对象
    2. 父类成员变量和子类成员变量堆内存创建一片内存,指向值为null,先父类成员变量显式初始化(如果有的话)
    3. 父类代码块(父类成员变量初始化)
    4. 父类构造器
    5. 子类成员变量显式初始化(如果有的话)
    6. 子类代码块(子类成员变量初始化)
    7. 子类构造器
  • 相关阅读:
    计算机毕业设计(附源码)python医院预约挂号管理系统
    MTK联发科、高通、紫光展锐手机SOC平台型号汇总(含详细参数)
    HTML和CSS
    网络安全系列-三十九: 开源IDS/IPS/网络安全监控平台SELKS docker部署及问题处理
    【Android笔记50】Android应用如何获取系统服务(软键盘管理器、闹钟管理器)
    谁有软件测试面试真题(完整答案)?正在找工作的可以收藏一下!
    stm32 笔记 PWM及HAL库应用
    荧光染料AF430 tetrazine,AF430 四嗪,深橙色固体
    40个高质量ssm+vue毕设项目分享【源码+论文】(一)
    thrust工程化学习(七)----噪声滤除进阶版
  • 原文地址:https://blog.csdn.net/m0_61083409/article/details/126577863
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号