分配一个带有垃圾的数组(堆垃圾值)

Allocate an array with garbage (heap garbage values)

我在面试时遇到了这个问题,虽然听起来很愚蠢,但我觉得它很有趣。所以,问题是,如何使用堆垃圾(不仅仅是 zeroes 的东西)初始化数组。

例如相对于:

int [] ints = new int[10];
System.out.println(Arrays.toString(ints));

最后打印将保证一切都是zeroes

但是有没有一种方法可以用 不是 零的潜在值来实例化这个数组?

说实话,有两点。

我不知道这个问题的确切要点,因为它需要对 Unsafe class 进行一些并非每天都在做的调查。可能是公司(反正我没通过面试),真的 做这个底层编程。

其次,我很幸运,我是在查看 String concat 是如何完成的时才发现这一点的,我第一次看到它并被它所吸引。

    jdk.internal.misc.Unsafe unsafe = getUnsafe();

    for (;;) {
        int[] arr = (int[]) unsafe.allocateUninitializedArray(int.class, 10);
        int sum = Arrays.stream(arr).sum();
        if (sum != 0) {
            System.out.println(Arrays.toString(arr));
            break;
        }
    }

这被记录为:

Allocates an array of a given type, but does not do zeroing.