Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java内存指南_Java_Memory_Jvm_Memory Management - Fatal编程技术网

Java内存指南

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用于下一个和上

可能是个愚蠢的问题,但

对于基本Java数据结构将消耗多少内存,有什么好的指导方针吗

Ie:一个包含int成员和
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))。