「java对象的长度」对象有长度吗
本篇文章给大家谈谈java对象的长度,以及对象有长度吗对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
一个Java对象到底占多大内存
第一问中,integer,Double是可以准确知道大小的
java中int double(包装类分别是Integer和Double,实际是一样的)分别占用的大小是4B 和8B
这里说的B,就是我们通常说的KB中的那个B,全称是Byte。
1B = 8bit。 所以我们通常会说int是32位,有时候又4字节
而String他是有char数组组成,一个长度为10的String,占用的char就是10个,一个char是2B。
所以看String占多少内存,需要知道String的长度
二问中:答案是可以的
摘自ObjectOutPutStream的API说明
FileOutputStream fos = new FileOutputStream("t.tmp");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeInt(12345);
oos.writeObject("Today");
oos.writeObject(new Date());
oos.close();
怎么确定Java对象的大小
普通对象的结构如下,按64位机器的长度计算
1. 对象头(_mark), 8个字节
2. Oop指针,如果是32G内存以下的,默认开启对象指针压缩,4个字节
3. 数据区
4.Padding(内存对齐),按照8的倍数对齐
数组对象结构是
1. 对象头(_mark), 8个字节
2. Oop指针,如果是32G内存以下的,默认开启对象指针压缩,4个字节
3. 数组长度,4个字节
4. 数据区
5. Padding(内存对齐),按照8的倍数对齐
清楚了对象在内存的基本布局后,咱们说两种计算Java对象大小的方法
1. 通过java.lang.instrument.Instrumentation的getObjectSize(obj)直接获取对象的大小
2. 通过sun.misc.Unsafe对象的objectFieldOffset(field)等方法结合反射来计算对象的大小
java.lang.instrument.Instrumentation.getObjectSize()的方式
先讲讲java.lang.instrument.Instrumentation.getObjectSize()的方式,这种方法得到的是Shallow Size,即遇到引用时,只计算引用的长度,不计算所引用的对象的实际大小。如果要计算所引用对象的实际大小,可以通过递归的方式去计算。
java.lang.instrument.Instrumentation的实例必须通过指定javaagent的方式才能获得,具体的步骤如下:
1. 定义一个类,提供一个premain方法: public static void premain(String agentArgs, Instrumentation instP)
2. 创建META-INF/MANIFEST.MF文件,内容是指定PreMain的类是哪个: Premain-Class: sizeof.ObjectShallowSize
3. 把这个类打成jar,然后用java -javaagent XXXX.jar XXX.main的方式执行
有兴趣可以看下博主的:
java里,string的长度是固定的?
String s;这个只是声明了一个变量,除了变量本身,是没有长度的;
String s = "sss";这个与"sss"的值的长度有关,此时s.length将为3;
但即使给s执行s + "1"操作,Java虚拟机也将创建一个新的字符串"sss1",这个与刚才的"sss"指向了不同的地址空间,此时s.length为4;
这是因为String的实现是final类型的char[],一旦对其赋值,其所对应的地址空间将不会改变;如果再次赋值或者执行"s"都将开辟新空间创建新对象,所以说每一个Java栈上的String对象的长度是固定的。
java的String对象的大小有限制吗
String类型底层存储是采用char[]数组的,所以说char[]数组的大小就决定了String对象的大小.由于数组的下标采用int类型,因此最大能存放的元素个数只有2147483648个,这个数也就是2G.所以说char[]数组能存储2G大小的字符.因此在理想情况下也就是内存无限大,堆可以无限大的情况下,一个String类型的极限大小就是4G,长度为2147483648个字符
java对象的长度的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于对象有长度吗、java对象的长度的信息别忘了在本站进行查找喔。
发布于:2023-01-04,除非注明,否则均为
原创文章,转载请注明出处。