【问题标题】:Maximum size of 2D array in JavaJava中二维数组的最大大小
【发布时间】:2017-07-23 10:58:26
【问题描述】:

我必须创建 1000 个堆,每个堆可以包含 10^6 个节点。为了方便访问节点、删除节点和更新节点键,我计划创建一个大小为 10^6 * 1000 的二维数组,我将在其中存储节点的引用。但是,这么大的数组可以用 Java 创建吗? 有没有更好的方法可以在不创建数组的情况下从堆中访问特定节点? 我可以遍历堆的每个节点以搜索我的节点,但是这个过程将是 1 个堆的顺序 n,如果我必须从所有堆中删除特定节点,则该过程需要数量级为 1000*n。

【问题讨论】:

    标签: java arrays memory memory-management heap-memory


    【解决方案1】:

    如果您需要比 int 的最大值更多的内存,您可以使用 sun.misc.Unsafe。见这里:https://dzone.com/articles/understanding-sunmiscunsafe

    【讨论】:

      【解决方案2】:

      Java 数组由 ints 索引,因此最大索引为 2^31 - 1,即 2147483647(大约 2E9),因此您应该可以使用 1E9 大小的数组。但是,您需要有足够的 RAM,不要忘记 10 亿 longs 将占用 8GB 的​​ RAM。

      Do Java arrays have a maximum size?有更详细的讨论

      【讨论】:

        猜你喜欢
        • 2021-10-07
        • 2017-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-21
        • 1970-01-01
        • 2017-02-17
        相关资源
        最近更新 更多