转自:http://zsl-oo7.blog.163.com/blog/static/353297032012322114354445/
Java没有C/C++的sizeof,当你想查看一个new出来的对象到底在堆内存里占了多大地方的时候,就不怎么方便。尤其是,今天我想研究一下到底private属性会不会被子类“继承”,也就是说new一个子类的时候,会不会为它分配父类中private变量的空间。所以必须要sizeof一下。
网上搜了一个帖子,教怎么在Java中实现类似sizeof方法的,原帖如下:
也可以参考这个英文网页:
自己操作过程中遇到了点儿小曲折,这里记录一下,按如下步骤操作则不会出问题:
1、先去下载SizeOf_0_2_1.zip(http://sourceforge.net/projects/sizeof/files/),解压其中的 SizeOf.jar 到本地任意目录.最好不要带中文或者空格。比如解压到D:\java,将 D:\java\SizeOf.jar 加入到calsspath环境变量。
2、写测试代码:
import net.sourceforge.sizeof.* ; //别忘了.*
public class TestSize{
public static void main(String args[ ]){
SizeOf.skipStaticField(true); //java.sizeOf will not compute static fields
SizeOf.skipFinalField(true); //java.sizeOf will not compute final fields
SizeOf.skipFlyweightObject(true); //java.sizeOf will not compute well-known flyweight objects
Father fa = new Father();
System.out.println(SizeOf.deepSizeOf(fa)); //this will print the object size in bytes
}
}
class Father{
private int v;
}
3、编译:
javac TestSize.java
4、运行(此处需注意,要加入-javaagent参数):
java -javaagent:"D:\java\SizeOf.jar" TestSize
输出结果是:
JAVAGENT: call premain instrumentation for class SizeOf
16
如果想用更加易读的方式输出大小,可以这样改打印结果那句:
System.out.println("father's size:"+SizeOf.humanReadable(SizeOf.deepSizeOf(fa)));
OK了,准备开始测试private到底会不会被“继承”的问题
相关推荐
在Java编程语言中,了解一个对象的内存大小是很有用的,特别是在性能调优和内存管理方面。`sizeOf`通常是指用来计算对象在内存中占用空间的一种方法。本篇文章将探讨如何通过Java来实现这样的功能,以及相关知识点。...
总结来说,理解Java对象大小的计算对于优化内存使用、防止内存泄漏以及提高应用程序性能至关重要。开发人员需要了解不同方法的优缺点,并根据实际需求选择合适的方式。同时,应当注意,过于关注单个对象的大小可能...
本示例“测量Java对象大小的demo”提供了一种方法,通过使用Java的`java.lang.instrument`包来注入`javaagent`,进而利用`Instrumentation`接口测量Java对象的精确内存占用。下面我们将详细探讨这一过程。 首先,`...
当我们谈论“Java对象内存大小”时,我们通常指的是一个Java对象在内存中占据的空间,包括对象头、实例字段以及可能的对齐填充。这个知识点对于开发高效缓存系统尤其重要,因为缓存需要精确管理内存来最大化存储效率...
通过`Unsafe`类或`Instrumentation`接口,我们可以获取这些组成部分的具体大小,进而了解一个Java对象在内存中的占用情况。这样的知识对于优化内存使用、排查性能问题和理解JVM内存模型具有重要意义。
在Java编程语言中,了解一个对象占用的内存字节数对于优化内存使用和理解程序性能至关重要。本篇文章将深入探讨如何计算Java对象占用的内存字节数,以及影响这一数值的因素。 首先,Java对象在堆内存中由四个部分...
本文将深入探讨Java中的对象内存占用,以及如何使用"java-sizeof-0.0.4"工具来查看Java对象在内存中的大小。 在Java中,内存主要分为堆内存(Heap)和栈内存(Stack)。对象通常存储在堆内存中,而基本类型的变量和...
总的来说,计算Java对象的大小是一个复杂的过程,涉及到JVM的内部机制。开发者可以通过各种工具和源码分析来获取这些信息,并将其应用于实际的性能优化工作中。理解这些细节不仅有助于提高程序效率,也是成为一名...
总的来说,理解Java对象在内存中的表示方式和占用空间,结合合适的工具进行监控,是开发高效、稳定的Java应用的基础。通过深入学习这些知识点,开发者可以更好地优化程序,提高系统资源利用率,避免因内存问题导致的...
在Java编程语言中,了解一个对象占用的内存大小是非常重要的,尤其是在优化性能或者处理大量对象时。本示例主要探讨如何测试Java对象占用的内存大小,以便更好地理解内存使用情况。 首先,`SizeOf.java`可能是一个...
总结来说,在Java中,使用数组为一个类定义多个对象是常见的做法,它使得我们可以方便地管理和操作一组具有相同类型但不同实例的数据。通过声明和初始化数组,然后在循环中实例化每个数组元素,我们可以高效地创建和...
后者利用了字符串常量池(String Constant Pool)的概念,当字符串字面量首次出现时,会在常量池中创建一个新的字符串对象,之后相同的字符串字面量将直接引用池中的已有对象,避免了重复创建相同内容的字符串。...
Java中List对象的分页思想是一种常用的数据处理技术,通过将一个大的List对象分割成多个小的List对象,每个小的List对象包含一定数量的元素,例如10个或n个。这种技术可以用于解决大规模数据的处理问题,例如批量...
Font 类是 Java 中的一个类,用于设置程序中的字体实例对象。 Font 类有三个参数:face、style、size,分别指字体的外观、样式和大小。我们可以使用 Font 类的静态方法 getFont() 创建 Font 对象,例如:Font font =...
总之,Java对象和数组的内存占用取决于JVM的配置、对象的字段、数组的元素类型和长度等因素。开启或关闭压缩选项会影响对象和数组引用的大小,进而影响整体的内存占用。对于内存优化和性能调优来说,了解这些细节至...
- 每次比较时,如果前一个数大于后一个数,则交换它们的位置,直到所有数都按顺序排列。 3. **输出结果**:排序完成后,使用 `System.out.print` 输出排序后的结果。 - 输出格式为:“ĴСΪ” + x + “<” + y +...
例如,可以将图像的缩放操作放在一个单独的线程中,以避免阻塞主线程,或者利用内存中的缓存来避免重复的缩放操作。 7. **注意事项** - 图像格式转换:`ImageIO.write()` 方法的第三个参数是输出的图像格式,如 ...
- Java程序的源文件名必须与公共类名保持一致,并且一个Java源文件中只能有一个公共类。 2. Java程序的结构和开发过程 - Java应用程序的典型结构包括一个公共类和main方法,这是程序的入口点。 - 开发过程包括...
本篇文章将深入探讨Java对象池的实现原理,以及如何借鉴"Jakarta Commons Pool"组件来设计一个轻量级的对象池。 一、对象池的基本概念 对象池的基本工作流程包括以下几个步骤: 1. 初始化:预创建一定数量的对象并...
NULL 博文链接:https://spice.iteye.com/blog/1104340