Pergunta estupida! qual o tamanho maximo de uma string?

String em java tem tamanho máximo??
QUal??? :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol:

[quote=“SdRuboW”]String em java tem tamanho máximo??
QUal??? :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol:[/quote]

Sua pergunta não é estupida… fiquei tb curioso e tentei pesquisar algo, mas não encontrei nada.
Na API não consta nada que restrinja a quantidade máxima, até porque é alocado dinamicamente na memória… mas se alguém tiver alguma referência, seria melhor…

tbm to atras da resposta.
eu acho que por ser dinamico ele vai limitar pelo tamanho da memória da MV java.
mas se achar alguma coisa coloco aqui!! :wink:

[quote=“SdRuboW”]tbm to atras da resposta.
eu acho que por ser dinamico ele vai limitar pelo tamanho da memória da MV java.
mas se achar alguma coisa coloco aqui!! :wink:[/quote]

Cara… fiquei pensando também e não achei nada!!!

Deve ser bem bitelo o tamanho…

Provavelmente limitado pelo tamanha físico!

simples de se descobrir, faça um loop infinito onde vá aumentando cada vez mais um objeto String, se tu receber um Out of Memory de exceção… é pq o limite é a memória disponivel pro JVM…! :lol:

tava pensando nessa solução mesmo.

String aux = “a”;

while(true)
{
aux+ =aux;
System.out.println(aux.length());
}

aí da pra ter uma ideia do tamanho tbm caso a maquina trave ehehehe.

É vai crescendo enquanto tiver memória!!
Fiz o teste ele colocou uma string de 8388608 caracteres e deu o erro

java.lang.OutOfMemoryError

:lol:

aki tb deu os mesmos 8388608 caracteres.
eu achava q nao era fixo esse valor… varia de computador pra computador… mas parece q nao… exatamente o mesmo valor! 8O

Também testei…

Mas da minha String passou de 13000000 (treze milhões) de caracteres!
Até o momento o length está em 13220000!

Abraço,
Maicon

e nao se esquecao q a cada loop vai estar criando uma string nova! o limite maximo deve ser uns 50% maior do q o resultado!

Na verdade a quantidade máxima será a soma de 0 até o número máximo que vcs obtiveram ai sempre somando-se o ultimo criado, o que resultaria num algoriítmo mais ou menos assim…

for(int i=0;i<=13220000;i++)
{
     i+=i;
}

e isso da mais que 50%…

ps: se o CLV ler esse post vai brigar comigo pq eu usei o <= o que gasta mais clock de processamento! hahahaha ele é pirado… =)

cya!

E pq vc usou i++ ao invés de i-- q é melhor!!!

heuahuehuahe!!!

Mas não existe o tal do garbage collector, que tem o serviço de limpar da memória variáveis que não são mais usadas? :wink:

Ou ele somente entre em serviço após o abandono do uso do método ?

Abraço,
Maicon

A idéia do garbage Collector é fazer a limpa da memória mesmo, mas o seu método executa mais rápido que isso, e ele entra em execução de tempos em tempos ao nao ser qeu vc explicitamente o chame!

=)

cya!

O garbage collector não é uma thread concorrente ?
Imagine então ela não ser executada antes da geração de mais de 13 milhões de objetos String ! Não é praticamente impossível ?

Abraço,
Maicon

bom, falando entao em baixo nível, além do GC tem que se levar em consideração o tamanho do HEAP, o tempo no qual o GC executa, e tempo de tracing, e tudo mais… é claro que ele vai executar durante esse tempo, pq ele para todas as threads que estão em execussão, para trabalhar, por um tempo (SWT) e depois volta a execução as outras threads.

mas não sei o quanto ele conseguirá desalocar até o laço encher toda a memória… isso daria uma ótima pesquisa…

bom, tem uma material da IBM qeu fala bastante sobre isso, se alguem se interessar, pode pesquisar e postar aqui o resultado.

ai vai o link:
http://www-106.ibm.com/developerworks/ibm/library/i-garbage1/

cya!