JVM相关知识---对象

Java面试知识点解析——JVM篇 小编精心为大家准备了一手资料以上Java高级架构资料、源码、笔记、视频。Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术【附】架构书籍BAT面试的20道高频数据库问题解析Java面试宝典Netty实战算法BATJ面试要点及Java架构师进阶资料《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取! 阅读详情

1. 对象的创建

   在我们一般创建对象是就是只需要new就可以,但是在虚拟机内部,需要很多步骤来把这个对象创建出来。首先,虚拟机会会根据new这个指令检查这个指令的参数是否在常量池中可以定位到一个类的符号引用。并且被加载、解析初始化过,如果没有则执行类加载。

   类加载后,虚拟机就该为对象分配空间了。有两种分配空间的方式,一种是“指针碰撞”,一种是“空闲列表”。何为指针碰撞? 首先假设内存空间是规整的,那么就把空闲与分空闲的区域分开存放,空闲的放在一边,非空闲的放在一边,在这两个区域的临界出有一个指针,当有一个新的对象要存进来的时候,指针就会根据大小往空闲的地方移一点。采取指针碰撞的前提就是内存是规整的,如果不规整就没办法了,但是可以用“空闲列表”。空闲列表是指,虚拟机会维护一个列表,在这个表上会记录着内存中哪块是使用过的,哪块是没使用过的,新建的对象就会根据这个表选择合适的位置存储。

   在分配内存时,还应该考虑到一个问题:再给一个对象分配内存的同时,另一个对象也要内存。这个解决办法也有两种,一种是采用同步处理-----虚拟机采用CAS配上配上失败重试的方式保证更新操作的原子性。另一种是先为每个线程在对上分配一小块内存,称为本地线程分配缓冲(TLAB)。哪个线程要分配内存就用哪个TLAB这个,只有TLAB用完分配新的时才需要同步锁定。分配完成后虚拟机要把分配完的内存初始化为零,保证程序不赋值也可以使用。

 

2. 对象的内存布局

   在HotSpot虚拟机中对象分为三个区域:对象头、实例数据、对齐填充

   对象头包含两个部分,一部分用于存储对象自身的运行时数据,如哈希码、GC分代年龄、所状态标志、线程持有的锁。偏向线程ID等等。这部分在32位和64位的虚拟机中分别占用32bit和64bit.

   另一部分是指针类型,虚拟机通过这个指针确定这个对象是哪个类的实例。但并不是所有的虚拟机都通过这个指针去找实例。另外,如果是数组对象,对象头还应该有一个记录数组长度的数据。虚拟机可以通过java对象元数据信息确定大小,但是不可以通过元数据确定数组的大小。

   实例数据是存储对象真正的有效信息,就是程序所定义的所有变量,无论是自己的,还是从父类继承下来的。

   对齐填充并没有实际用处,就是根据jvm对齐地址的。

 

3. 对象访问

   对象访问的方式也分为两种,一种是直接指针访问,另一种是使用句柄。都是通过栈上的reference数据指向对象实例,然后操作。

   其实这两个的区别就是一个直接指向对象,另一个有一个叫做句柄池的“管理员”,先都指向句柄,而后通过句柄再去找对象实例。

   下面我用两个图来说明:

 

                直接指向


             通过句柄指向

 

 

 

                           

 

 

       


JVM面试篇 直接内存并不是 JVM 运行时数据区的一部分, 但也会被频繁的使用: 在 JDK 1.4 引入的 NIO 提供了基于 Channel 与 Buffer 的 IO 方式, 它可以使用 Native 函数库直接分配堆外内存, 然后使用DirectByteBuffer 对象作为这块内存的引用进行操作(详见: Java I/O 扩展), 这样就避免了在 Java堆和 Native 堆中来回复制数据, 因此在一些场景中可以显著提高性能。 阅读详情

相关推荐

JVM对象内存分配机制全解析

摘要: JVM对象内存分配过程涉及多阶段优化策略。首先通过逃逸分析和标量替换实现栈上分配,减少GC压力;大对象直接进入老年代避免复制开销;常规对象优先在Eden区分配,通过Minor GC和年龄计数器管理对象晋升;老年代采用空间担保机制防止容量不足;动态年龄判断机制提前将存活率高的对象移入老年代。该分配体系结合了栈分配、分代收集和动态调整策略,有效平衡了内存利用率和GC性能。(149字)

qq_45043381的博客 846

简单分析 JVM 对象的内存(对象的创建)以及String相关知识

简单分析 JVM 对象的内存一、前言二、JVM 对象的内存解析1. 举例分析对象在内存中的存储过程2.内存中对象之间的赋值三、对象数组的内存分析四、早期让你尴尬的String1.简单介绍2.尴尬案例(1)String为啥不可被修改?a. 先简单看看String的b. 再简单来个好理解的例子(2)new String() 和 new Stirng("")(3)内存分析:字面量 和 new+构造器 创建Stringa. 字面量创建b. new+构造器创建c. 小思考——经典问题1)字符串常量池的优点?2)Str

@素素~的博客 686

嵌入式学习(29)-ASM330LHH驱动程序

ASM330LHH是一种系统级封装器件,具有3D数字加速度计和3D数字陀螺仪,扩展温度范围上限为+105 °C,适用于汽车非安全领域的应用。ASM330LHH 的满量程加速范围为±2 g、±4 g、±8 g 和 ±16 g,角速度范围扩展至 ±125 dps、±250 dps、±500 dps、±1000 dps、± 2000 dps 和 ±4000 dps,适合各种汽车应用。

剑藏锋的博客 1175

重新开始学习编程系列Day06——JVM执行引擎、对象实例化、String相关知识

文章目录前言一、JVM执行引擎1、执行引擎的工作过程2、java代码编译和执行的过程3、什么是解释器,什么是编译器4、为什么说java是半编译半解释型语言5、机器码、指令、汇编语言、高级语言6、HotSpot JVM执行方式7、JIT编译器8、方法调用计数器二、对象实例化1、创建对象的方式及创建对象步骤2、对象内存布局3、对象的访问定位三、String相关知识1、String的基本特性2、string的内存分配3、字符串的拼接操作4、intern()的使用5、G1的string去重操作 前言 这是JVM系列

一个成长中的程序员,期待用技术的眼光生活 577

python -- 海洋气象科研论文中常用绘图配色汇总

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。可以通过自定义选取不同颜色的rgb,通过自定义的方式构建colormap。

weixin_68789096的博客 972

扫地机器人:从仿真到决策,一个完整SLAM导航系统的自研之路

本文详细记录了从零开始自研扫地机器人SLAM导航系统的全过程,涵盖ROS-Gazebo仿真系统搭建、地图预处理优化、全覆盖规划算法迭代等关键技术。通过三次算法升级,最终实现92%的清洁效率,并分享DWA调参、状态机设计等实战经验,为开发者提供从仿真到落地的完整解决方案。

weixin_29053695的博客 352

JVM和类加载器相关知识,以及反射创建对象的区别

new 和反射创建对象的区别 new一个对象过程分析 所有的类都是在第一次使用时,被动态加载到jvm内存中,即首次创建对象时,或者类中的静态方法首次被调用时,或者静态属性被访问时,类加载器定位找到对应的class文件; 类加载器把class文件载入内存,并生成class对象,把对象中所有的静态资源都执行一遍,并把这些静态资源存放到jvm的方法区中,有且只在class对象首次生成时执行一次; ...

siying8419的博客 736

射频工程师必须了解的S参数四项要点

本文围绕单端 6 英寸走线的 S 参数展开深入分析,核心包含四项关键要点:低频下导线电学长度远小于信号波长,S11 呈大负分贝值、S21 接近 0 分贝;端口与走线的阻抗不匹配引发反射叠加,形成 S11 首个峰值(对应传输线四分之一波长频率);S21 相位可作为一致性检查依据,其 90° 相位差与 S11 峰值吻合;理想建模中 S11 峰值随频率上升因损耗下降,实际测量因连接器等阻抗不连续性,S11 会出现振荡上升。分析依托 Keysight ADS 工具与电磁求解器原理,为 S 参数解读提供科学支撑。

一只豌豆象的博客 1284

JVM 相关知识梳理(一) ----类加载 及 对象创建、分配、寻址

一)类加载过程: 虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制 行为步骤如下: 1:装载 入口有一下几种: 通过一个类的全限定名定义此类的二进制流 ,比如load 一个class文件、jar包、网络读取、或者实时计算生成的一个二进制流(如proxy代理,dubbo呢种写bean 完后load的方式) 将这个字节流所代表的静态存储结构转换为方法去的运行时数据结构,如Spring Bean 进行标签引

Lcy 560

概述DeepLab系列(deeplab v1, deeplab v2, deeplab v3, deeplab v3+)

前言:图像分割是指像素级别的图像识别,即标注出图像中每个像素所属的对象类别。 语义分割更注重类别之间的区分,而实例分割更注重个体之间的区别。 DeepLab是由Google团队提出的一系列图像分割算法。 DeepLab v1 (2014年) Paper (ICLR 2015) Code 创新点: 空洞卷积(Atrous Conv); <解决编码过程中信号不断被下采样,细节丢失的问题> 全连接条件随机场(Fully-connected Conditional Random Field)。

ZSH12345678900的博客 5528

华为防火墙NAT避坑指南:当双ISP出口遇到服务器发布,这些细节不注意会翻车

本文深入解析华为防火墙在双ISP出口环境下服务器发布的实战配置,重点探讨no-reverse参数对Server-Map表的影响、源进源出功能的实现及线路切换时的会话保持问题。通过策略路由和智能选路技术,确保HTTP/FTP服务在多运营商链路中的高可用性,避免路径不对称和NAT映射冲突等常见陷阱。

weixin_30897233的博客 550

JVM中对象的创建

类加载:类字节码从磁盘加载到内存。内存分配:在堆内存中为对象分配空间。字段初始化:给对象的成员变量赋默认值或显式值。构造方法调用:父类构造器先执行,之后执行当前类构造器。返回对象引用:返回指向对象的引用。JVM 对象的创建过程是理解 Java 内存管理、性能优化和垃圾回收的基础。通过深入理解这些细节,可以更好地编写高效的 Java 程序,并有效管理对象的生命周期。

m0_69529796的博客 1648

探索如何利用CST和ADS进行DDR的SIPI联合仿真

本文系统介绍了CST和ADS两款工具进行DDR信号完整性/电源完整性(SI/PI)联合仿真的方法。CST采用工作室协同方式,通过PCB布局导入、材料设置、模型分配等步骤,重点分析了电源阻抗优化和信号波形质量。ADS则利用SIPro、PIPro等专用工具,突出系统级验证和自动化优化功能。两者各有优势:CST擅长3D结构精确建模,ADS更适于快速系统验证。文章建议可根据项目需求混合使用两种工具,并提供了模型简化、频带选择等实用技巧。通过对比分析,为工程师选择仿真工具提供了决策参考。

一只豌豆象的博客 1150

JVM相关-JVM模型、垃圾回收、JVM调优

JVM相关-JVM模型、垃圾回收、JVM调优

qq_46788415的博客 2388

【DEIM创新改进】独家下采样创新改进篇 | ECCV 2026 | DEIM 引入FSD-Down频域-空间动态下采样,在下采样过程中保留小目标的高频信息、助力小目标检测、遥感小目标检测有效涨点

🔥本文提出了一种名为FSD-Down的频域-空间动态下采样模块,用于改进DEIM网络模型在小目标检测中的性能。FSD-Down通过小波分解显式保留低频语义和高频细节,结合分组卷积、动态通道权重和可学习缩放因子,自适应强化目标边缘与纹理特征。该模块能有效减轻传统下采样造成的频率混叠和细节丢失,提升对小目标、密集目标和低对比度目标的检测能力。实验表明,FSD-Down计算开销可控,在保持实时性的同时显著提升检测精度,特别是在VisDrone和AITODv2数据集上对小目标的检测性能提升显著。

Ai缝合怪、助力小伙伴高效发论文 82

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

JAVA JVM对象的实现

JVM对象内存分配与访问机制: JVM对象内存分配主要分为类加载检查、内存分配、初始化和对象头设置等步骤。分配方式包括指针碰撞(适用于规整内存)和空闲列表(适用于不规整内存)。为确保线程安全,JVM采用CAS或TLAB机制。对象内存布局由对象头(含MarkWord和类型指针)、实例数据和对齐填充组成。对象访问方式包括句柄访问(稳定但性能低)和直接指针访问(性能高但需修改引用)。HotSpot虚拟机默认采用直接指针访问方式以提高性能。

best_virtuoso的博客 1284

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

JVM的一些知识

JVM 是 Java Virtual Machine 的简称,意为 Java 虚拟机。虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。常见的虚拟机:JVM、VMwave、Virtual Box。VMwave与VirtualBox是通过软件模拟物理CPU的指令集,物理系统中会有很多的寄存器;JVM则是通过软件模拟Java字节码的指令集,JVM中只是主要保留了PC寄存器,其他的寄存器都进行了裁剪。JVM 是一台被定制过的现实当中不存在的计算机。

weixin_72779762的博客 1280

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

如何应对Android面试官->JVM对象回收与逃逸分析

本节主要围绕下面三个方向进行知识点的讲解,带你从架构师角度认识内存溢出JDK 提供的 markOop.hpp(也就是 Mark Word) 文件中有提及到:不管是 32 位的虚拟机还是 64 位的虚拟机,这个 age 都是存放的 4 位,从二进制来看存放的最大值就是 1111,按照十六进制转换,就是 15,所以说复制回收 age 的最大次数默认是 15 次;JVM 也提供修改参数,可以修改这个值:-XX:MaxTenuringThresold = 10 // 就可以修改这个值;

IT_Android的博客 962

JVM Knowledges-类的 <clinit> 与 对象的<init> 对比

time_hunter的专栏 1006

Java面试之JVM

本章主要记录一些jvm相关的面试题目,平时对这方面不太注重,也是边学边记。

m0_74823388的博客 914

Java JVM相关知识解析

本文深入分析了 Java 虚拟机(JVM)的内存结构、垃圾回收机制、类加载过程以及常见的调优与性能监控方法。通过图文并茂的形式,帮助开发者更好地理解 JVM 的工作原理,提升 Java 应用的性能和稳定性。

专注分享编程开发与技术进阶干货! 608

内存数据库SQLite

本文以“黑板”比喻内存数据库,对比传统硬盘数据库,详解 SQLite 使用 :memory: 实现高速临时存储的原理与优势。通过动态占位符生成、executemany 批量操作等技巧,实现毫秒级数据读写,适用于单元测试、临时计算与隐私保护场景。强调其瞬时性与内存限制,提醒开发者注意数据量控制与安全防护,突出参数化查询防注入的核心价值。

看了都说刑的博客 328
上一篇: JVM相关知识---java内存区域
下一篇: JVM有关知识---垃圾收集(一)
MA_lj
博客等级 码龄9年 9粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值