当前位置: 代码迷 >> 综合 >> 内存分析与相关工具上篇(内存布局与分析工具)
  详细解决方案

内存分析与相关工具上篇(内存布局与分析工具)

热度:95   发布时间:2024-02-21 07:41:15.0

通过前面的课程,我们学习了“内存溢出”和“内存泄漏”的区别。

简单来说,Java 中的内存溢出就是内存不够用,一般是堆内存报错,当然也可能是其他内存空间不足引起的。

下面我们详细讲解 Java 对象的内存相关知识。

Java 对象内存布局简介

请思考一个问题: 一个对象具有 100 个属性,与 100 个对象每个具有 1 个属性,哪个占用的内存空间更大?

为了回答这个问题,我们来看看 JVM 怎么表示一个对象:

说明

  • alignment(外部对齐):比如 8 字节的数据类型 long,在内存中的起始地址必须是 8 字节的整数倍。
  • padding(内部填充):在对象体内一个字段所占据空间的末尾,如果有空白,需要使用 padding 来补齐,因为下一个字段的起始位置必须是 4/8 字节(32bit/64bit)的整数倍。
  • 其实这两者都是一个道理,让对象内外的位置都对齐。

一个 Java 对象占用多少内存?

参考 Mindprod,我们可以发现事情并不简单:

  • JVM 具体实现可以用任意形式来存储内部数据,可以是大端字节序或者小端字节序&#x
  相关解决方案