Pergunta estupida! qual o tamanho maximo de uma string?

15 respostas
S

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

15 Respostas

J

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

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…

S

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:

C

“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:

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

Deve ser bem bitelo o tamanho…

Provavelmente limitado pelo tamanha físico!

M

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:

S

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.

S

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

java.lang.OutOfMemoryError

:lol:

D

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

M

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

F

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!

J

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!

C

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

heuahuehuahe!!!

M

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

J

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!

M

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

J

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!

Criado 17 de maio de 2004
Ultima resposta 18 de mai. de 2004
Respostas 15
Participantes 9