转自: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到底会不会被“继承”的问题
相关推荐
NULL 博文链接:https://312256159-qq-com.iteye.com/blog/1582196
NULL 博文链接:https://sdfx.iteye.com/blog/2201116
注入javaagent使用Instrumentation测量Java对象的大小
有效测量出 java 对象 内存 大小 可供缓存等计算
主要介绍了计算一个Java对象占用字节数的方法,较为详细的分析了Java中各类对象所占用的字节数,需要的朋友可以参考下
统计缓存大小(查看java对象所占的内存大小).
JAVA对象所占内存大小计算例子,博文地址:http://blog.csdn.net/u012787710/article/details/53164226
java-sizeof-0.0.4:一个查看java对象占用内存大小
java中的栈(深层了解java虚拟机对对象的内存分布)
NULL 博文链接:https://spice.iteye.com/blog/1104340
测试java对象占用内存大小的例子,可以测试常用的类型
命令行: java -XX:+PrintCommandLineFlags -version 查看jvm默认参数 分别是 -XX:+UseCompressedOops 和 -XX:+UseCompressedClassPointers 这2个参数都是默认开启(+代表开启,-代表关闭) UseCompressedOops:普通...
NULL 博文链接:https://treemanfm.iteye.com/blog/2038954
java实现使用javolution完成数据接收过程中大小端转换的问题
NULL 博文链接:https://langyu.iteye.com/blog/1167581
创建CollegeStudent类的一个对象;输出目前的CollegeStudent类对象的人数;修改对象的姓名、年龄和专业;然后再显示这个对象的全部信息(调用toString方法,或在println方法中直接输出使其自动调用toString方法)。 ...
一个固定大小的,高效的对象池。主要用于对象池。 a fixed and high efficency object pool
1)指针碰撞(Bump the Pointer): Java堆中内存绝对规整(所有用过的内存放在一边,空闲的内存放在另一边,中间放一个指针作为分界点的指示器),所分配的内存仅需要把指针向空闲空间那边挪动一段与对象大小相等的...
通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥,通常应对私钥加密后再保存、如何从...
1、编写程序练习将以下5个Person类的对象放在一个HashSet中。 姓名:张三 身份证号:178880001 姓名:王五 身份证号:178880002 姓名:李四 身份证号:178880003 姓名:王五 身份证号:178880002 姓名:李四 身份证...