java对象的内存布局 内存分堆内存和栈内存,用new操作符创建的复杂对象属性,和简单类型的属性存放的位置不一样,String是个比较特殊的类型,看看这里吧http://xiebh.javaeye.com/blog/132748 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 还是不明白为什么要把int放后面? 为什么我先声明的age属性在内存布局中保存到了最后,而name和birthday 属性跑到了前面?你用什么工具查看的? System.out.println(unsafe.getObject(p, 8L)); System.out.println(unsafe.getObject(p,12L)); System.out.println(unsafe.getInt(p,16L));用unsafe直接去取,age成员变量的偏移量是16 Java的内存布局没有意义啊,你又不是学C++的。除非你用Java的Unsafe,ASM等工具,才需要简单了解,而且通常你不知道布局,也可以使用它们。这种所谓的布局,什么用都没有的。 我现在就是要用Unsafe操作内存 前8个字节:字段和Klass指针前者是标记信息,比如锁信息,垃圾回收信息,hashcode等等Klass指针,找Class对象的 lz的第3个问题,我想可能是和c语言中的结构体字段一样,为了性能的需要而进行的对齐操作 当然不是,如果age我使用的是Integer类型,那么age就在最前面了 因为int是基本数据类型,比如说int age = 5,在new出来的对象内存区就存了一个int的5;而String,data是引用数据类型,new出来的对象内存区只是存了一个引用。 java是面向对象的语言,我想java把所有的都看作对象处理的,那么基本类型在jvm中的优先级没对象的高吧,呵呵!这应该是jvm实现的时候,定义的把,把基本类型存储在后面,恶哈哈! \u4e2d\u56fd\ java代码里怎么转换成中文呢? 这个操作符是什么意思? 谁帮我看看我的java访问数据库的问题,十分感谢 有关dtree刷新的问题 如何启动其他的Java程序? 紧急求助!来者加分!! 为什么我老无法捕捉到windowDeactived这个事件? IP地址字符串与整数之间怎样转换? 快教教我吧~关于线程问题! 我的tomcat为什么不认汉字的文件名啊 有没有什么工具可以看出java程序运行了点了多少内存 如何到到一个局部变量的泛型型别
还是不明白为什么要把int放后面?
你用什么工具查看的?
System.out.println(unsafe.getObject(p,12L));
System.out.println(unsafe.getInt(p,16L));用unsafe直接去取,age成员变量的偏移量是16
这种所谓的布局,什么用都没有的。
字段和Klass指针
前者是标记信息,比如锁信息,垃圾回收信息,hashcode等等
Klass指针,找Class对象的
当然不是,如果age我使用的是Integer类型,那么age就在最前面了