Java中类的内存分配

时间:2018-10-02 20:02:17

标签: java class memory-management trie

这是一个有效的Java代码,用于实现特里数据结构。

class TrieNode {
TrieNode[] arr;
boolean isEnd;
// Initialize your data structure here.
public TrieNode() {
    this.arr = new TrieNode[26];
}

我不明白的是内存分配是如何工作的

TrieNode[] arr;

代码。如果是这样的话

class TrieNode {
    int[] arr;
    boolean isEnd;
    // Initialize your data structure here.
    public TrieNode() {
        this.arr = new int[26];
    }

我知道这会为26个整数分配内存。 最好能解释一下第一个代码的内存分配方式。 (从编译器的角度来看)

编辑:很抱歉,如果我的问题不清楚。我问的是我们在

中创建了包含26个元素的数组
new TrieNode[26];

分配了多少内存?

2 个答案:

答案 0 :(得分:0)

直到您不拨打电话new为止,都不会完成内存分配。

因此TrieNode[] arr;可作为将来的参考。 只有在调用构造函数时,Java才会分配内存并在arr内设置引用。

链接:

答案 1 :(得分:0)

使用您的第一个代码,当您创建TriNode之类的对象时

TriNode t = new TriNode();

JVM将分配内存以存储26个对arr元素的引用和1个对isEnd字段的引用。为了存储引用,JVM将32位用于32位JVM,将64位用于64位JVM。 创建数组

new TrieNode[26];

它将分配26 *(64bit / 32bit)+1布尔值,因为它不会创建TrieNode对象,而是会创建引用数组来存储尚未创建的TriNode对象。因此,当您初始化数组元素

arr[0] = new TrieNode();

然后它将为TrieNode()对象分配内存,而arr [0]将指向该对象。

  

所以结论是JVM不会为26个Trinode对象分配内存   相反,它将为他们的引用分配内存。