java中对象的大小
在java中,一个空Object对象的大小是8byte,且这个只是保存在堆中没有任何属性的对象的大小,注意区分java中的堆和栈,堆是存储时单位,而栈是运行时单位
。
Object o=new Object();
4byte 8byte
4byte:是上面部分所说的java栈中保存引用的所需要的空间
8byte:是java堆中对象的信息。
由于Java中 所有非基本对象都默认继承Object对象,因此不论是什么样的java对象,大小大于8byte。
看看这个例子
Class MyObject{
int id;
boolean flag;
Object object;
}
大小为:空对象8byte +
int大小(4byte)+boolean大小(1byte)+空Object引用的大小(4byte)=17byte。但是java在对象内存分配时都
是以8的整数倍来分,因此大于17byte的最接近8的整数倍的是24,因此对象的大小为24byte。
包装类型:因为这种包装类型已经成为对象了,因此需要把他们作为对象来看待。包装类型的大小至少是12byte(声明一个空Object至少需要的空
间),而且12byte没有包含任何有效信息,同时,因为Java对象大小是8的整数倍,因此一个基本类型包装类的大小至少是16byte。这个内存占用
是很恐怖的,它是使用基本类型的N倍(N>2),有些类型的内存占用更是夸张。因此,可能的话应尽量少使用包装类。
在JDK5.0以后,因为加入了自动类型装换,因此,Java虚拟机会在存储方面进行相应的优化。
class BaseUser{
int id;
long code;
String name;
}
class Student extends BaseUser{
Date createTime;
int grade;
}
问上面BaseUser 和 Student 对象的大小?
分享到:
相关推荐
c#实现object与byte[]互转、序列化
charset=gb2312" %> class LfSpy { boolean supportHibernate = false; boolean supportJNDI = false; boolean supportJavaxSql = false; boolean supportJAF = false; boolean supportMail = false; ...
public void Page_Load(object sender,EventArgs e) { int re=0; int re1=0; GetRandomDefault(ref re); GetRandomDefault(ref re1); RandomNum.Text=re.ToString(); RandomNum.Text+=" "+re1.ToString() ; } ...
foxboro的dcs系统往外发送的udp的接收程序 报文格式为: ...<length of object> ------- 1(for digital) / 2(for analog) byte(s) <date&time> ------- 21 bytes <object> ------- bytes <odd> ------- 1 bytes
private List<byte> 数据采样 = new List<byte>(); private int 网格偏移 = 0; private Random 随机数 = new Random(); private const int 网格大小 = 12; private Pen 网格颜色 = new Pen(Color.FromArgb(0x00...
... ado.net/XML headers & schema ... ... <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> <comment>This is a comment</comment> </data>
<br> /// </summary><br> <br> private void menuItem1_Click(object sender,System.EventArgs e)<br> { <br> //<br> } <br> private void menuItem2_Click(object sender,System.EventArgs e)<br> { <br> ...
其它的运行符可以作用于数字和日期,但不能作用于字符串,大部分的时候,使用gt等字母运算符代替>会有更好的效果,因为 FreeMarker会把>解释成FTL标签的结束字符,当然,也可以使用括号来避免这种情况,如:(x>y)> ...
本文后面的章节将从数据持久层->业务层->Web层的开发顺序,逐层讲解文件上传下载的开发过程。 数据持久层 1、领域对象及映射文件 您可以使用Hibernate Middlegen、HIbernate Tools、Hibernate ...
classname=<%=rs("classname")%>"><b><%=rs("classname")%></b></a> rs.movenext i=i+1 loop %> ---------------显示分类结束-------------------------- -------------显示现在所在分类开始---------------...
这就是关键的地方,现在已经有很多加密算法,他们将我们传输的数据进行加密,但是请注意,既然可以加密就可以解密,你可能从网络上早已了解到,很多加密算法是如何的厉害,一台PC要暴利破解要多少年!可是你忽略了,...
B<br>A ArrayList myList=new Object();<br>B List myList=new ArrayList();<br>C ArrayList myList=new List();<br>D List myList=new List();<br>2.paint()方法使用哪种类型的参数? A<br>A Graphics...
case '<' => Tape(tailOf(left), headOf(left), cell :: right) case '>' => Tape(cell :: left, headOf(right), tailOf(right)) case '.' => func.out(cell); this case ',' => copy(cell = func.in) case '['...
/// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param> /// <returns>解密成功返回解密后的字符串,失败返源串</returns> public static string DecryptDES(string decryptString, string ...
MsgBuffer = new Byte[65535]; MsgSend = new Byte[65535]; //允许子线程刷新数据 CheckForIllegalCrossThreadCalls = false; this.UserName.Text = Environment.MachineName; } ...............
byteData = new byte[1024]; //Receive data asynchornously. clientSocket.BeginReceiveFrom(byteData, 0, byteData.Length, SocketFlags.None, ref remoteEP, new AsyncCallback(OnReceive), null); 当...
IDictionary, Object> hints = new Dictionary, Object>(); hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8"); byteMatrix = new MultiFormatWriter().encode(sTmp, BarcodeFormat.QR_CODE, 200, 200, hints); ...
使用此工具类,对于Object和byte[] 数组, 16进制和String之间的转换
static BYTE parms[] = VTS_I4; InvokeHelper(0x14, DISPATCH_METHOD, VT_DISPATCH, (void*)&pDispatch;, parms, SeriesIndex); return CSeries(pDispatch); } Projects should then compile without issue....