zoukankan      html  css  js  c++  java
  • list可以存放的数据大小

    ArrayList内部为数组,上限应该是int的最大值,20亿左右,LinkedList理论上是无限的

    ArrayList我们都知道是数组实现的,那么数组的最大长度其实就是ArrayList的最大长度,说到这里,其实有人已经有答案了。其实我们看一下它的length属性就可以了。length属性是32位的有符号整数,它的最大值是2的31次幂,就是2G。为何有这个限制呢?为什么length的属性不是long型呢?我们假设一下,如果它是long型的,那么它的最大长度是2的63次幂。内存永远也不会有那么大吧。即使是字节数组长度是int的,最大长都达到2GB.

    由此想到了String,这个家伙底层也是基于数组的,是一个字符数组。字符是16位的基本类型,一个String的最大长度是多少呢?就是字符数组的最大长度也是2G,占用内存是4GB。

    一个数组最大的长度是一个 int 的最大值,也就是 2147483647(2的31次方减1),而一个字符串在 Java 内部是使用 char[] 来表示的,也就是说一个字符串的最大长度是 2147483647。

    不过这些都是理论值,具体能放多少与 JVM 内存有关, 可以在执行 java 命令时加上 -Xmx 1024m 就将 JVM 内存最大置为了 1G, 默认情况下是 64MB.

    可以写一个String[]死循环添加数组,消耗内存,看看会不会死机。

    实际开发中,虚拟机默认内存大小根据不同的虚拟机实现有所不同,可以在启动应用时用-Xmx调整最大堆大小,比如调整堆最大大小为2G:
    一般四五十万的数据是放得下的。

  • 相关阅读:
    Hive
    Hadoop简介与分布式安装
    Hadoop分布式文件系统HDFS
    HDFS的操作SHELL和API
    HDFS高级功能
    Yarn
    Hadoop的I/O操作
    Hadoop的RPC工作原理
    Mapreduce入门和优化方案
    MapReduce的工作机制
  • 原文地址:https://www.cnblogs.com/javakangkang/p/14170195.html
Copyright © 2011-2022 走看看