基本类型中的boolean占用多少内存? 是由jvm规范决定的,还是由jvm实现来决定? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 何苦来着?本来boolean类型占用1个bit就可以了,为什么非要设计的占用1个byte。 如果boolean只用一个bit的话,那指向它的指针或者引用怎么办? 指针可是没办法指向一个bit的啊! jvm规范,至于占用一个字节,我估计是jvm的内部是按照字节进行运算的。 和int一样参考《深入java虚拟机》 jokerjava(冷血) ( ) 信誉:96 2006-07-20 17:10:00 得分: 0 好像是28个字节 ---------------你指的一个Boolean对象实例? java 1.5不分Boolean 和 boolean了吧 错,不是1个byte而是2个byte,Java对数据的处理要么是2位要么是4位,即使你只需要1个bit jokerjava(冷血) ( ) 信誉:96 2006-7-20 17:45:54 得分: 0 java 1.5不分Boolean 和 boolean了吧 ----------------------------嗯?还有这事?一个是基本类型,一个是对象,怎么可能统一起来了? 一个是基本类型,一个是对象,怎么可能统一起来了?1.5能自动拆包封包 所以写程序 Boolean <-> boolean可以互换 具体怎么统一的 是不是按对象统一的 不清楚 jokerjava(冷血) ( ) 信誉:96 2006-07-21 15:07:00 得分: 0 一个是基本类型,一个是对象,怎么可能统一起来了?1.5能自动拆包封包 所以写程序 Boolean <-> boolean可以互换 具体怎么统一的 是不是按对象统一的 不清楚 ---------------------------------自动拆包封包和具体占用多少个内存应该没有关系,如果这样也算是统一的话,那也只是动态的,表象的统一。 天啦.什么基本功啊? 都成星的人了~~~居然说基本类型只要一个bit就行了? 汗~~~~java又不是c编程.c的基本类型最小也要8bit啊~~~否则cpu怎么寻址啊????????????????????操作bit位要两个时钟周期,32位cpu的按照32bit录址.8位cpu按8bit寻址.没见过1位的cpu package test;import java.io.IOException;import java.io.ObjectOutputStream;import java.io.OutputStream;import java.util.IdentityHashMap;import java.util.Map;public class CacheSizes { private static class NullOutputStream extends OutputStream { public void write(int b) throws IOException { size++; } public void write(byte b[]) throws IOException { size += b.length; } public void write(byte b[], int off, int len) { size += len; } public int size() { return size; } int size; private NullOutputStream() { size = 0; } } private CacheSizes() { } public static int sizeOfInt() { return ((Integer) primitiveSizes.get(Integer.TYPE)).intValue(); } public static int sizeOfChar() { return ((Integer) primitiveSizes.get(Character.TYPE)).intValue(); } public static int sizeOfBoolean() { return ((Integer) primitiveSizes.get(Boolean.TYPE)).intValue(); } public static int sizeOfLong() { return ((Integer) primitiveSizes.get(Long.TYPE)).intValue(); } public static int sizeOfDouble() { return ((Integer) primitiveSizes.get(Double.TYPE)).intValue(); } private static int getSize(Class clazz) { int size = 0; try { NullOutputStream out = new NullOutputStream(); ObjectOutputStream outObj = new ObjectOutputStream(out); outObj.writeObject(clazz); size = out.size(); } catch (IOException ioe) { } return size; } private static final Map primitiveSizes = new IdentityHashMap() { { put(Boolean.TYPE, new Integer(CacheSizes.getSize(Boolean.TYPE))); put(Byte.TYPE, new Integer(CacheSizes.getSize(Byte.TYPE))); put(Character.TYPE, new Integer(CacheSizes.getSize(Character.TYPE))); put(Short.TYPE, new Integer(CacheSizes.getSize(Short.TYPE))); put(Integer.TYPE, new Integer(CacheSizes.getSize(Integer.TYPE))); put(Float.TYPE, new Integer(CacheSizes.getSize(Float.TYPE))); put(Double.TYPE, new Integer(CacheSizes.getSize(Double.TYPE))); put(Long.TYPE, new Integer(CacheSizes.getSize(Long.TYPE))); } }; public static void main(String[] args) { System.out.println(sizeOfBoolean()); System.out.println(sizeOfInt()); System.out.println(sizeOfLong()); System.out.println(sizeOfChar()); System.out.println(sizeOfDouble()); }}自动拆包封包具体怎么实现 不清楚 很可能Boolean 和 boolean实现一样 占用内存也一样 我认为自动拆箱装箱是由编译器来动态实现的,否则这个代价也太大了。因为照这样说,int和Integer等等占用内存也是一样的了 int的长度是最自然的,又不是有海量的boolean,浪费一点空间,换来的是效率,难道不值得吗?能按bit寻址的CPU是有的,但是效率绝对比按字或字节来寻址低得多得多,而且我敢肯定JVM不能按bit导址。 以前没有想过这个问题,最近做嵌入式开发,处理图片(主要是黑白二值Tiff文件),tiff里图像数据是用byte数组来保存,一个byte代表8个点(每行的dot数如果不是8的倍数,最有一个byte就只是用前几位)。后来为了程序简单明了,就把它转化为boolean矩阵了,这样数组占用内存就比原来大多了,经常抛出内存不够的异常。所以才想到boolean到底用了多少内存。 服务器程序启动与停止 怎么避免产生相同的牌? 急求助:jxl类使用报java.lang.NoClassDefFoundError 中断线程的问题! 这段文档没看明白,请朋友解释一下。 文件管理工具 如何关闭程序(在线求助) 请各位大虾说说有什么好的学习JAVA和JBUILDER的电子书 谁能告诉我java中的debug()函数怎么用? 我不懂java,想问各位,java到底干嘛用的 关于JLable的问题+20 java正则表达式的问题
好像是28个字节
---------------你指的一个Boolean对象实例?
Java对数据的处理要么是2位要么是4位,即使你只需要1个bit
java 1.5不分Boolean 和 boolean了吧
----------------------------
嗯?还有这事?一个是基本类型,一个是对象,怎么可能统一起来了?
1.5能自动拆包封包 所以写程序 Boolean <-> boolean可以互换
具体怎么统一的 是不是按对象统一的 不清楚
一个是基本类型,一个是对象,怎么可能统一起来了?
1.5能自动拆包封包 所以写程序 Boolean <-> boolean可以互换
具体怎么统一的 是不是按对象统一的 不清楚
---------------------------------自动拆包封包和具体占用多少个内存应该没有关系,如果这样也算是统一的话,那也只是动态的,表象的统一。
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.util.IdentityHashMap;
import java.util.Map;public class CacheSizes {
private static class NullOutputStream extends OutputStream { public void write(int b) throws IOException {
size++;
} public void write(byte b[]) throws IOException {
size += b.length;
} public void write(byte b[], int off, int len) {
size += len;
} public int size() {
return size;
} int size; private NullOutputStream() {
size = 0;
} }
private CacheSizes() {
} public static int sizeOfInt() {
return ((Integer) primitiveSizes.get(Integer.TYPE)).intValue();
} public static int sizeOfChar() {
return ((Integer) primitiveSizes.get(Character.TYPE)).intValue();
} public static int sizeOfBoolean() {
return ((Integer) primitiveSizes.get(Boolean.TYPE)).intValue();
} public static int sizeOfLong() {
return ((Integer) primitiveSizes.get(Long.TYPE)).intValue();
} public static int sizeOfDouble() {
return ((Integer) primitiveSizes.get(Double.TYPE)).intValue();
} private static int getSize(Class clazz) {
int size = 0;
try {
NullOutputStream out = new NullOutputStream();
ObjectOutputStream outObj = new ObjectOutputStream(out);
outObj.writeObject(clazz);
size = out.size();
} catch (IOException ioe) {
}
return size;
} private static final Map primitiveSizes = new IdentityHashMap() {
{
put(Boolean.TYPE, new Integer(CacheSizes.getSize(Boolean.TYPE)));
put(Byte.TYPE, new Integer(CacheSizes.getSize(Byte.TYPE)));
put(Character.TYPE, new Integer(CacheSizes.getSize(Character.TYPE)));
put(Short.TYPE, new Integer(CacheSizes.getSize(Short.TYPE)));
put(Integer.TYPE, new Integer(CacheSizes.getSize(Integer.TYPE)));
put(Float.TYPE, new Integer(CacheSizes.getSize(Float.TYPE)));
put(Double.TYPE, new Integer(CacheSizes.getSize(Double.TYPE)));
put(Long.TYPE, new Integer(CacheSizes.getSize(Long.TYPE)));
}
}; public static void main(String[] args) {
System.out.println(sizeOfBoolean());
System.out.println(sizeOfInt());
System.out.println(sizeOfLong());
System.out.println(sizeOfChar());
System.out.println(sizeOfDouble());
}
}自动拆包封包具体怎么实现 不清楚
很可能Boolean 和 boolean实现一样 占用内存也一样
因为照这样说,int和Integer等等占用内存也是一样的了