Java对象运行时在内存中的情况

您可能已经知道,一旦创建了一个对象,它就只是堆中的一系列字节。您可能对Java对象在内存中的情况感到好奇吗?

1.变量

以下是“Base”(B)类的对象布局示例。这个类没有任何方法。我们将在后面的文章中看到如何在内存中布置方法。

如果我们有另一个类“Derived”(D)扩展这个“Base”类。内存布局如下所示:

子对象具有与父对象相同的内存布局,除了它需要更多空间来放置新添加的字段。这种布局的好处是,指向D对象的B型指针仍然在开头看到B对象。因此,通过B引用对D对象进行的操作保证是安全的,并且不需要动态地检查B指向的是什么。

2.方法

遵循相同的逻辑,该方法可以放在对象的开头。

但是,这种方法效率不高。如果一个类有很多方法(例如M),那么每个对象必须设置O(M)指针。此外,每个对象都需要有O(M)指针的空间。那些使得创建对象更慢并且对象更大。

优化方法是创建一个虚函数表(或vtable),它是指向特定类的成员函数实现的指针数组。为每个类创建一个vtable的单个实例,并使每个对象存储一个指向vtable的指针。

这是优化的方法。

*以上是我对斯坦福编译器讲座的笔记,这些讲座具有非常好的动画效果。

参考文献:
1。斯坦福编译器讲座
2. JVM

相关文章:

  1. 关于C / C ++指针的前5个问题
  2. 用Java定义用户定义对象的LinkedList
  3. Java数组在内存中的外观如何?
  4. Java内存泄漏的介绍

转载来源:https://www.programcreek.com/2011/11/what-do-java-objects-look-like-in-memory/

Java对象运行时在内存中的情况相关推荐

  1. 类和对象运行时在内存里是怎么样的?各种变量、方法在运行时是怎么交互的?

    转载自   类和对象运行时在内存里是怎么样的?各种变量.方法在运行时是怎么交互的? 在回答这个问题之前先了解一下Java的一些基础知识. 我们知道Java程序运行在虚拟机环境里,那我们先看一下虚拟机的 ...

  2. java修改运行时实体类中属性上面的注解值

    工具类 package com.ruoyi.web.controller.tool;import com.ruoyi.biz.domain.ModelAttribute; import com.ruo ...

  3. [二]Java虚拟机 jvm内存结构 运行时数据内存 class文件与jvm内存结构的映射 jvm数据类型 虚拟机栈 方法区 堆 含义...

    前言简介 class文件是源代码经过编译后的一种平台中立的格式 里面包含了虚拟机运行所需要的所有信息,相当于 JVM的机器语言 JVM全称是Java Virtual Machine  ,既然是虚拟机, ...

  4. Java 运行时的内存划分

    Java 运行时的内存划分 程序计数器 记录当前线程所执行的字节码行号,用于获取下一条执行的字节码. 当多线程运行时,每个线程切换后需要知道上一次所运行的状态.位置.由此也可以看出程序计数器是每个线程 ...

  5. Android字体占有内存,android随意创建字体对象引发的应用程序运行时占用内存过大...

    android随意创建字体对象引发的应用程序运行时占用内存过大 在实际开发android项目过程中,由于是初次设置android系统没有的字体,所以用到了一个外部文件FounderFineRoundS ...

  6. 解决Windows10 系统中桌面窗口管理器运行时占用内存过大的问题

    问题复现 问题原因 产生这个问题的原因是因为在某次更新中 引发了内存泄漏问题所以会导致桌面窗口管理器运行时占用内存过大. 解决办法 链接: inter显卡驱动 选择安装驱动就行.

  7. Java RTTI运行时类型识别

    RTTI(Run-Time Type Identification),通过运行时类型信息程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型. RTTI提供了以下两个非常有用的操作 ...

  8. Java对象的创建、内存布局和访问定位

    在Java运行时数据区中,我们知道了虚拟机内存的概况,本文介绍虚拟机内存中的数据的其它细节,如对象如何创建.如何布局以及如何访问. 基于实用的原则,这里以HotSpot虚拟机和常用的内存区域Java堆 ...

  9. java 句柄池_深入理解JVM之Java对象的创建、内存布局、访问定位详解

    本文实例讲述了深入理解JVM之Java对象的创建.内存布局.访问定位.分享给大家供大家参考,具体如下: 对象的创建 一个简单的创建对象语句Clazz instance = new Clazz();包含 ...

最新文章

  1. Windows API获取系统配置文件的配置参数
  2. 制作iPhone App demo video
  3. c++判断正在使用的显卡_7°C警告:廉价硅脂害死显卡系列!还在用¥5块钱一大碗的导热膏吗...
  4. 绝对路径VS相对路径
  5. FusionCharts图表标题的参数设置
  6. 算法基础之搜索和经典排序
  7. 韩顺平php视频笔记79 80 错误和异常处理的机制 错误处理器 错误触发器
  8. python的字符串包括哪些_python公开课|Python字符串包含什么,我们应该怎么用
  9. tekla钢结构算量_吉林省中润钢结构科技有限公司应用BIM技术助力润德華城项目建设...
  10. Java菜鸟学习笔记--面向对象篇(十八):对象转型多态
  11. WP全新COS美女写真网站整站源码+两套下载站模板
  12. 当前上下文中不存在名称 ViewBag
  13. ESP8266开发之旅 阿里云物联网平台篇⑥ LED智能灯控制系统 全面讲解,上手一个小项目(MQTT客户端直连 + Web配网 + WebSocket局域网通信)
  14. 从零开始编写minecraft光影包(7)基础水面绘制
  15. Aspose.Word企业案例:Progetto Adele 使用 Aspose API 从预定义模板自动生成 Word 和 PDF 文件
  16. linux的gz文件怎么解压缩,linux gz 解压缩
  17. 西瓜微数独家工具! 超全微博粉丝分析!!!
  18. 储罐液位开关c语言编程,危化品企业罐区液位计和紧急切断阀的设置及联锁要求规范合集(1)...
  19. labelimg win10安装教程
  20. 写一个python定时发送消息的脚本——每天跟你女盆友说晚安

热门文章

  1. javascript 中的面向对象实现 如何封装
  2. 一些不起眼但非常有用的 Vim 命令
  3. 用jQuery插件jVectorMap制作中国省份区域图
  4. Linux(debian7)操作基础(十二)之文件加密使用指南
  5. mysql与python交互
  6. C++——面向对象设计原则
  7. 【AI视野·今日Robot 机器人论文速览 第二十八期】Wed, 1 Dec 2021
  8. 【CVPR2021】论文汇总列表--Part2
  9. JVM——Java内存模型(JMM)
  10. linux 下按内容查找文件