我正在试图弄清楚Java如何构建/为对象分配内存。 (是的,这是特定于实现的。我正在使用Oracle 1.7运行时。)我对此here和here做了一些工作,结果令人困惑。
首先,在两个引用的链接中,当我分配了一个对象数组时,相当于新的Object [10000],它每个对象使用4个字节。在32位系统上,这非常有意义。但是我在64位系统上,所以这里发生了什么?
第二,I compared the memory footprint of 8 booleans vs. a byte as the variables in a class。 8个布尔值需要24个字节/对象或3个字节/布尔值。单字节方法需要10个字节/对象。
就different ways to create a RGB class it gets really weird而言。
任何有关此处发生的事情的指导都表示赞赏。我有几个分配了很多的类,飞轮模式不起作用(这些对象的值在整个地方都有变化)。
相关问题,声明变量的顺序是否重要?回到过去做C ++编程的时候,声明“int,byte,int,byte”使用4 int的空间工作,而“int,int,byte,byte”使用3。
答案 0 :(得分:1)
这里有太多问题,但我会解决其中两个问题。
即使在64位系统上,Java是否仅限于32位地址空间?
32位Java仅限于32位地址空间。 64位Java不是。
Java是否限制为每个数组32位地址空间,然后每个数组对象都有一个指向元素所在位置的指针?
Java数组由int
索引,为32位。
答案 1 :(得分:0)
了解您使用的是64位系统,但是您运行的是32位还是64位的jvm? JVM本身会对许多优化产生影响,这些优化会影响测试结果。有许多JVM(尽管只有少数JVM很受欢迎),有些JVM可能比其他JVM更好或不同。