码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 一文了解JVM(中)


    HotSpot 虚拟机对象探秘

    对象的创建

    Header 解释
    使用 new 关键字 调用了构造函数
    使用 Class 的 newInstance 方法 调用了构造函数
    使用 Constructor 类的newInstance 方法 调用了构造函数
    使用 clone 方法 没有调用构造函数
    使用反序列化 没有调用构造函数

    说到对象的创建,首先让我们看看 Java 中提供的几种对象创建方式:

    下面是对象创建的主要流程:


    image


    虚拟机遇到一条 new 指令时,先检查常量池是否已经加载相应的类,如果没有,必须先执行相

    应的类加载。类加载通过后,接下来分配内存。若 Java 堆中内存是绝对规整的,使用“指针碰

    撞“方式分配内存;如果不是规整的,就从空闲列表中分配,叫做”空闲列表“方式。划分内存

    时还需要考虑一个问题–并发,也有两种方式: CAS 同步处理,或者本地线程分配缓冲(Thread

    LocalAllocation Buffer, TLAB)。然后内存空间初始化操作,接着是做一些必要的对象设置(元信

    息、哈希码…),最后执行 方法。


    为对象分配内存


    类加载完成后,接着会在 Java 堆中划分一块内存分配给对象。内存分配根据Java 堆是否规整,

    有两种方式:

    • **指针碰撞:**如果 Java 堆的内存是规整,即所有用过的内存放在一边,而空闲的的放在另一

      边。分配内存时将位于中间的指针指示器向空闲的内存移动一段与对象大小相等的距离,这

      样便完成分配内存工作。

  • 相关阅读:
    Docker主要命令
    面试算法43:在完全二叉树中添加节点
    【机器学习算法】神经网络与深度学习-5 深度学习概述
    Linux中7种文件类型
    CCRC信息安全服务资质分类及申请流程
    基础篇之环境搭建
    Day03---常用的全局配置项---window里面的所有内容
    山西电力市场日前价格预测【2023-09-18】
    如何使用Stream流操作将list中所有map的某个值拼接成字符串?
    设计模式学习(二十四):Spring 中使用到的设计模式
  • 原文地址:https://blog.csdn.net/2201_75506216/article/details/139456086
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号