Max size for StringBuffer

前端 未结 4 1564
被撕碎了的回忆
被撕碎了的回忆 2020-12-17 02:56

Why would the StringBuffer have a limit on its size?

I went through some of the links : http://www.coderanch.com/t/540346/java/java/maximum-size-hold-S

相关标签:
4条回答
  • 2020-12-17 03:32

    if you are getting anywhere near 2^31 characters in your buffer you are doing it wrong and you would have run out of memory long ago.

    0 讨论(0)
  • 2020-12-17 03:35

    Answer is different based on System architecture.

    This old machine when I posted answer on 2012

    Max Length of characters = 37748734

    Java Version : 1.6.0_35

    OS : Windows 7

    System Architecture : 32bits (x86)

    RAM : 2 GB

    Processor : Pentium Dual Core E5800 3.20GHz

    On 2016

    Max Length of characters = 301989886

    Java Version : 1.8

    OS : Ubuntu 14 LTE and Windows 7

    System Architecture : 64bits (x86_64)

    RAM : 8 GB

    Processor : Intel(R) Core(TM) i3-4130 CPU @ 3.40GHz

    Run This program your self

            StringBuffer strbTest = new StringBuffer();
            long len = 0;
            try {
                System.out.println("Wait.... til number not generated.");
    
                while(true) {
                    strbTest.append("a");
                    len++;
                }
            } catch (OutOfMemoryError e) {
                System.out.println("Max length on your system is "+len);
                System.out.println("Error");
            }
            System.out.println("End");
    

    Output

    Max length on your system is 37748734
    
    0 讨论(0)
  • 2020-12-17 03:42

    StringBuffer uses a char[].
    In Java an array can be indexed only via an integer which means the highest value the index of the array can be is Integer.MAX_VALUE - 1 (i.e. 2^31 - 1). Which means that the size of an array in Java can not be larger than Integer.MAX_VALUE

    0 讨论(0)
  • 2020-12-17 03:44

    because stringbuffer internally uses an array and the maximum number of elements an array can accommodate is 2^31-1 if you increment after reaching this it will go to negative and throws the error

    0 讨论(0)
提交回复
热议问题