我需要存储大量的日期(可能足够大,以至于需要考虑使用的堆空间量,因此请不要讲授过早的优化),我想知道使用某种原始表示是否有意义java.util.Date(或其他一些现有的Date类)的形式。我知道我可以进行一些性能分析来尝试一下,但是有人知道一个Date对象使用多少字节的内存吗?
我的直觉反应是Date的内存开销非常小。检查源代码,似乎该类仅包含一个实例字段(长为毫秒)。这意味着日期对象的大小是long的大小加上Object实例的大小-
即非常小。
然后,我发现此代码创建了数千个对象来确定对象的大小。它说的大小java.util.Date
是32个字节。与仅将日期存储为一个长整数(这是它在内部所做的事情)进行比较-
一个长整数是8个字节,因此为了拥有一个date对象,您必须付出四倍的代价。
但是,创建对象的开销不是很高。因此,如果您真的很担心空间,那么可以将日期存储为longs,并在需要时创建Date对象。
问题内容: 您将如何查找对象正在使用多少内存?我知道有可能找出一个代码块,而不是实例化对象(在其生命中的任何时候)要使用多少,这就是我想要的。 问题答案: 尝试这个: 如果对象是由垃圾收集器管理的,则getsizeof()调用该对象的__sizeof__方法并增加额外的垃圾收集器开销。
我最近读了很多关于字符串内存分配的文章,但找不到任何细节,如果在Java8中情况相同的话。 在Java8中,像这样的字符串会使用多少内存空间?我使用64位版本。
问题内容: 具有100个属性的一个对象所消耗的存储空间是否与每个具有一个属性的100个对象所消耗的存储空间相同? 为一个对象分配多少内存? 添加属性时会使用多少额外空间? 问题答案: 指出,这不是一个容易回答的简单问题: JVM可以自由地以内部或大端或小端的任何方式存储数据,并具有一定的填充或开销,尽管基元必须表现得好像它们具有官方大小一样。 例如,JVM或本机编译器可能会决定将64位长块(如)存
问题内容: 我和我的朋友正在讨论Strings,而我们坚持了这一点: 他说总共将创建三个对象,而我说将创建一个对象。 他在3个对象之后的逻辑是:一个用于“ ObjectOne”,一个用于“ ObjectTwo”,第三个是两个String对象的串联版本。 我在一个对象后面的逻辑是在编译时,两个字符串对象都将在字节码中串联为: 并且在运行时,将仅以这种方式创建一个对象。这背后的真相是什么? 问题答案:
我们目前正在为我们的一个产品添加服务器端脚本功能。作为其中的一部分,我正在评估JSR 223脚本引擎。因为我们可能会在服务器上运行大量的脚本,所以我特别担心这些脚本引擎的内存使用情况。将Rhino(苹果JDK 1.6.0_65-b14-462-11M4609,苹果OS X 10.9.2)与Nashorn(甲骨文JDK 1.8.0-b132)进行比较,每个ScriptEngine实例的内存使用量似乎
问题内容: 在Java中,如果我创建一个并将N个元素放入其中,它将占用多少内存?如果依赖于实现,那么什么才是好的“猜测”? 问题答案: 编辑; 噢,天哪,我是个白痴,我提供了HashMap的信息,而不是HashTable的信息。 但是,检查后,出于内存目的,实现是相同的。 这取决于您的VM的内部内存设置(项目的包装,32位或64位指针以及字对齐/大小),并且不是由Java指定的。 可以在这里找到有