java 中new一个对象占多少内存?

问题描述

java 中new一个对象占多少内存?要怎么计算呢?

解决方案

Object o=new Object(): 在java中空对象占八个字节,对象的引用占四个字节。所以上面那条语句所占的空间是4byte+8byte=12byte.java中的内存是以8的倍数来分配的,所以分配的内存是16byte.举个例子:Class O{ int i; byte j; String s;}其所占内存的大小是空对象(8)+int(4)+byte(1)+String引用(4)=17byte,因要是8的整数倍,所以其占大小为24byte.当然,如果类里有其他对象的话,也要把其他对象的空间算进去。其实这个在javaeye的电子期刊上有。
解决方案二:
用io流 object流转换成文件流 写到磁盘 看大小 或者用内存流 byteArray 得到了一个字节数组 看数组的长度就知道多少字节了

时间: 2024-08-02 04:41:09

java 中new一个对象占多少内存?的相关文章

java中类型所占字节数以及可表示的数字个数

基本概念 字节的单位是byte.位的单位是bit.1byte=8bit. 1bit能表示多少个数字--最小0,最大1.2的1次方个. 2bit能表示多少个数字--最小00,最大11.2的2次方个. 3bit能表示多少个数--最小000,最大111.2的3次方个. 依此类推-8bit可以表示2的8次方共256个数字. 若数没有正负之分可表示0-255共256个数字.若有正负之分可表示-128到+127共256个,因为8位里有一个位表示正负.   得出结论 java中基本类型内存中所占字节整理  

java中一个对象可以有多少个属性

问题描述 java中一个对象可以有多少个属性 java中一个对象可以有多少个属性 有n个变量,有n个方法,有n个常量,可以这么理解么 解决方案 而且一个对象可以拥有数组作为成员变量,以另一个类类型作为变量,前者可以包含成千上万个元素,后者,这个变量对象内又可以有自己的成员变量. 一个类还可以从它的基类得到成员.方法. 解决方案二: 这个没有算过,但是有个1000个应该没问题. 解决方案三: 想多少有多少 (在存储空间允许的范围内) 解决方案四: 对象的属性分为静态属性,和动态属性,成员变量可以视

浅析Java中对象的创建与对象的数据类型转换_java

Java:对象创建和初始化过程 1.Java中的数据类型    Java中有3个数据类型:基本数据类型(在Java中,boolean.byte.short.int.long.char.float.double这八种是基本数据类型).引用类型和null类型.其中,引用类型包括类类型(含数组).接口类型.     下列语句声明了一些变量: int k ; A a; //a是A数据类型的对象变量名. B b1,b2,-,b10000;// 假定B是抽象类或接口. String s;      注意:从

sizeof-C#中如何计算类占空间大小??

问题描述 C#中如何计算类占空间大小?? C#中如何计算类占空间大小?? 我用sizeof不行 用using System.Runtime.InteropServices;的Marshal.SizeOf(p)报异常. 解决方案 C# 能否获取一个对象所占内存的大小? 今日,在项目重构的时候忽然想到一个问题,一个类哪些成员的增加,会影响一个类所占内存的大小?C#有没有办法知道一个对象占多少内存呢? 第一个问题:很快想到是类的非静态的字段.属性. 第二个问题:首先想到的是sizeof(). 下面开始

java-JAVA中数组定义new分配内存空间的问题

问题描述 JAVA中数组定义new分配内存空间的问题 JAVA中在定义一个数组的时候,根据书上内容形式,举一个例子 int[] arr=new int[]{3,4,5,}; 但是在实际中,我见到过或者使用更多的是 int[] arr={3,4,5}; 这个时候要不要new去分配内存又有什么区别呢? 在JAVA中 是不是没有new 分配的时候 数组arr在内存栈中 new分配内存空间时 数组arr就到了堆内存中呢 解决方案 现在也不是很理解,找了一个大神告诉我说 第二种是静态初始化,在编译的时候就

javase-在java中,一个对象是不是就是一个线程?

问题描述 在java中,一个对象是不是就是一个线程? 一个对象是不是就是一个线程? public static void f5(){ String str = new String("a");//这句话,包含了线程的新生,执行,死亡 } 解决方案 如果你不主动new线程,只有一个主线程. 并不是一个对象就是一个线程. 要是这样的话, 就疯了~~ 解决方案二: 这只是创建了一个对象,并没有新的线程 解决方案三: 这是对象,在主线程里,一个进城至少有一个线程,就是主线程 解决方案四: no

java中一个汉字和一个字母所占内存字节比较以及后台验证的减半处理

  基本概念 我们一般理解java中 一个字符char占2个字节byte 一个汉字占2个字节byte 一个字母占1个字节byte   其他情况 对于汉字来说,采用gbk编码占两字节,采用utf8编码占三个字节.   String的length()方法 String s1 = "aa"; String s2 = "a好"; s1.length() s2.length() 答案都是2,因为该方法是返回字符的个数,并不是内存中的字节数.   数据库应用 java的编码不会

java中基本类型封装对象所占内存的大小(转)

这是一个程序,java中没有现成的sizeof的实现,原因主要是java中的基本数据类型的大小都是固定的,所以看上去没有必要用sizeof这个关键字. 实现的想法是这样的:java.lang.Runtime类中有一些简单的能涉及到内存管理的函数: Every Java application has a single instance of class Runtime that allows the application to interface with the environment in

Java中堆内存和栈内存详解

Java把内存分成两种,一种叫做栈内存,一种叫做堆内存. 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用. 堆内存用于存放由new创建的对象和数组.在堆中分配的内存,由java虚拟机自动垃圾回收器来管理.在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存