Java内存指南
可能是个愚蠢的问题,但 对于基本Java数据结构将消耗多少内存,有什么好的指导方针吗 Ie:一个包含int成员和Java内存指南,java,memory,jvm,memory-management,Java,Memory,Jvm,Memory Management,可能是个愚蠢的问题,但 对于基本Java数据结构将消耗多少内存,有什么好的指导方针吗 Ie:一个包含int成员和String成员的简单POJO将消耗多少内存(假设包含10个字符的字符串)?所述10个对象的列表将消耗多少内存 etc内存占用空间 字符串/对象内存使用情况 我想说144位代表字符串(32位代表指针,80位代表10个字符,32位代表长度int),32位代表int,32位代表指向对象的指针,总共208位。10的列表需要2080位用于对象和指向它们的指针,另外32*2*10用于下一个和上
String
成员的简单POJO将消耗多少内存(假设包含10个字符的字符串)?所述10个对象的列表将消耗多少内存
etc内存占用空间
字符串/对象内存使用情况
我想说144位代表字符串(32位代表指针,80位代表10个字符,32位代表长度int),32位代表int,32位代表指向对象的指针,总共208位。10的列表需要2080位用于对象和指向它们的指针,另外32*2*10用于下一个和上一个指针,32用于列表长度,32用于指针。这使得总共2784位。在我使用Java的经验中,与我认为它需要的(也称为C)相比,您使用了一个乘以2的乘法器,使其为5568位
在一天结束时,如果您担心内存需求,请测试并查看!但是要测试这么小的数字是相当困难的。。。IBM Research的作者写了几篇关于分析和控制Java程序内存膨胀的论文。最近的一半看起来与您的询问有关
我参加了这个主题的学习,发现它很好地介绍了Java这个可怕的、几乎被避免的方面。字符串是出了名的棘手,因为它们抓住了下面的字符数组,该数组与作为原始字符串对象的子字符串的其他字符串对象共享 有人问了一些愚蠢的问题,但你的问题不在其中。:-)在64位虚拟机上,指针可以是64位的,10个字符是160位的,因为Java字符是16位类型(与C相比,这可能说明了您的经验)。两者都有优点:)我在Java中使用的主要领域是数据结构,它使用的是整数而不是int,我猜是x2的来源。Michael:但是VM规范并没有强制要求字符串在内存中保持UTF16编码。优化内存占用而不是运行时效率,字符串实现可能只需要在内部对字符数据UTF8进行编码或使用任何其他编码。虽然在内部使用UTF-8时可能会满足API,但对运行时效率的影响将非常可怕(许多O(1)方法突然变成O(n))。