Max size for StringBuffer

三世轮回 提交于 2019-12-18 04:23:04

问题


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-String-buffer.

Is that because of the count member variable, which is an int?

Suppose that we have 2^31-1 chars in StringBuffer and that we append some more chars to that StringBuffer. Count member variable would be incremented by the number of chars appended and if Count variable is already at its max (2^31-1), it would revert back to some negative value.

Why would it throw an error?


回答1:


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




回答2:


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




回答3:


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



回答4:


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.



来源:https://stackoverflow.com/questions/11908665/max-size-for-stringbuffer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!