linkedhashset vs标签内存消耗



在Java中,与"正常"的标签相比,LinkedHashset的链接hashset消耗是多更多的内存(字节)?我知道linkedhashset对于某些操作的速度稍慢,但是内存使用呢?

https://github.com/dimitrisandreou/memory-measurer/blob/master/master/elementcostindatastructures.txt

HashSet是〜32字节/元素; LinkedHashSet是〜40字节/元素。

顾名思义,除了核心HashSet之外,LinkedHashSet明确地状态需要维护链接列表。我认为可以肯定地假设可以将内存消耗的上限近似近似,就好像您只有两个单独的数据结构:哈希集和一个链接列表。他们消耗记忆是一个单独的问题。

但是,如果您需要有关使用的内存字节数量的硬数据,则可以始终自己执行一些测试。它应该不难测试,或者一段时间Google - 我确定互联网上已经有一些测试结果。

@edit,在路易斯的答案

之后

对我来说似乎很有趣,为什么差异较小。这是我写的简单基准:

package com.company;
import com.javamex.classmexer.MemoryUtil;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Random;
public class Main
{
    public static void main(String[] args)
    {
        // Creating data structures under test -------
        HashSet<Integer> hashSet = new HashSet<>();
        Random random = new Random();
        for (int i=0; i<1000000; i++)
        {
            hashSet.add(random.nextInt());
        }
        LinkedHashSet<Integer> linkedHashSet = new LinkedHashSet<>(hashSet);
        // Measuring memory usage --------------------
        long sizeOfHashSet = MemoryUtil.deepMemoryUsageOf(hashSet);
        long sizeOfLinkedHashSet = MemoryUtil.deepMemoryUsageOf(linkedHashSet);
        System.out.println("Size of HashSet:n" + sizeOfHashSet + " B");
        System.out.println("Size of LinkedHashSet:n" + sizeOfLinkedHashSet + " B");
        System.out.println("LinkedHashSet is bigger from HashSet by " + (sizeOfLinkedHashSet*100/sizeOfHashSet - 100) + "%");
        System.out.println("n");
        long numberOfElements = hashSet.size();
        System.out.println("Number of elements in the test HashSet: " + numberOfElements);
        System.out.println("Average size of a single element in HashSet: " + sizeOfHashSet/numberOfElements + " B");
        System.out.println("Average size of a single element in LinkedHashSet: " + sizeOfLinkedHashSet/numberOfElements + " B");
    }
}

运行了几次后,我注意到它会打印出童话稳定结果(对象大小不同,/- 2 KIB),我下面介绍:

Size of HashSet:
56347616 B
Size of LinkedHashSet:
64348040 B
LinkedHashSet is bigger from HashSet by 14%
Number of elements in the test HashSet: 999876
Average size of a single element in HashSet: 56 B
Average size of a single element in LinkedHashSet: 64 B

有趣的是,它与路易斯给出的值不符。但是,每个元素的字节差与路易写的(8 B)相同。有人可以解释价值观的差异吗?我是在错误的方式测量对象大小吗?

最新更新