Tagged: Memory Toggle Comment Threads | 键盘快捷键

  • Roger 4:17 pm on April 4, 2011 固定链接 | 回复
    Tags: , , , Memory   

    Java Memory Tips and Tricks 

    Advertisements
     
  • Roger 3:17 pm on March 26, 2011 固定链接 | 回复
    Tags: , BlackBerry, , , Memory   

    Java Memory 测试 

    by Roger (roger2yi@gmail.com, http://www.twitter.com/roger2yi )

    这个Java Memory的测试,目的在于研究基本对象(空对象,引用,数组,字串)的内存开销和内存分配与布局,原理和测试代码参考自(http://www.javaworld.com/javaworld/javatips/jw-javatip130.html?page=1),并扩展到其它平台特别是手机平台进行测试,从已有的数据来看:

    1. JDK32bits 的空对象为8个bytes,引用是4个bytes,内存分配是8取整,成员变量地址不需要对齐
    2. JDK64bits 的空对象为16个bytes(实际是12个bytes,被取整到16个bytes),引用是4个bytes,内存分配是8取整,成员变量地址不需要对齐
    3. Sun的WTK J2ME模拟器的数据比较奇怪,跟下面的M8手机上kJVM的结果相差较远,存在变量地址需要4对齐的现象,因为kJVM的实现有很多,所以可能各个不同实现的结果差别会比较大
    4. 在M8手机上一个移植的kJVM上的结果是空对象为4个bytes,引用是4个bytes,内存分配是4取整,成员变量地址不需要对齐
    5. 在三星5230上的kJVM的测试结果跟上面一样,看来模拟器的数据不具备真实的参考意义,实际的kJVM实现在内存耗费上针对kJVM只支持有限的内存空间做了专门优化,对象的内存占用比较小
    6. 在Android 2.3/3.0 模拟器和一个M8手机的移植Android2.1系统,还有联想的乐Phone上的Android2.2上测试结果是空对象为16个bytes!!!引用是4个bytes,内存分配是8取整,成员变量地址必需4对齐,这意味着一个byte成员变量也要占用4个bytes的空间(看来Android无论模拟器还是手机基本上都是同一套虚拟机源码,测试结果都一样)
    7. 黑莓手机模拟器的数据也比较奇怪,无法作为参考

    完整的数据在下面的这份Excel文档,可以自行下载测试程序(包含源代码)在其它kJVM如Nokia S40,索爱等支持kJava的手机,或者Android和黑莓手机上进行测试,如能把结果告知(在原文档中增加一栏数据并寄回给我即可),将不胜感激。

    数据:http://pluto-hades.googlecode.com/files/JavaMemory.xls

    GoogleDoc:https://spreadsheets.google.com/pub?hl=zh_CN&hl=zh_CN&key=0AjfzaZDib9_8dDdsWTV1ZGlqOGlFODF4czVMRldKMUE&output=html

    程序包(含源码):http://pluto-hades.googlecode.com/files/JavaMemory.zip

    部分数据截图:

     
c
Compose new post
j
Next post/Next comment
k
Previous post/Previous comment
r
回复
e
编辑
o
Show/Hide comments
t
返回顶部
l
Go to login
h
Show/Hide help
shift + esc
取消