java.lang.StackOverflowError: o que pode causar?  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
padcoe
Virtual Machine Man

Membro desde: 25/10/2008 07:30:15
Mensagens: 528
Offline

Fala amigos

To com um bug aqui e preciso descobrir o motivo, mas está flórida pq não sei o que pode ocasionar este estouro na minha camada com o BD.



Alguém pode me dar uma luz?

Obrigado

This message was edited 1 time. Last update was at 04/03/2009 09:18:06

diegosantiviago
JavaGuru

Membro desde: 14/12/2008 11:53:44
Mensagens: 221
Localização: BR
Offline

talvez uma recursão que não acabou, talvez um laço infinito.. cadê o código?

SCJA, SCJP, SCBCD, SCEA (I), IBM SOA, ITIL v3
[Email] [WWW] [MSN]
padcoe
Virtual Machine Man

Membro desde: 25/10/2008 07:30:15
Mensagens: 528
Offline

Ele não faz um laço infinito pq aqui no ambiente de desenvolvimento funciona, o problema é quando vai para o ambiente do cliente. Lá é bem lerdo as coisas, não sei se isso tem algo a ver :S
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3926
Offline

a stack é memória reservada aos programas, para operações de eventos de hardware. Se vc está recebendo esse tipo de erro(stack overflow), é o software que está consumindo memória demais.

www.citrox.com.br
diegosantiviago
JavaGuru

Membro desde: 14/12/2008 11:53:44
Mensagens: 221
Localização: BR
Offline

tenta aumentar a memória nos arquivos de configuração

SCJA, SCJP, SCBCD, SCEA (I), IBM SOA, ITIL v3
[Email] [WWW] [MSN]
victorwss
JWizard
[Avatar]

Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline

Estranho que a recursão ocorre dentro do toplink.

Primeira coisa a tentar, vê se a versão do toplink é a mais atual.

Victor Williams Stafusa da Silva

Bacharel em Ciência da Computação - UFMT // Especialista em Desenvolvimento Java - CEFET/MT // Doutorando em Ciência da Computação - IME-USP
SCJP 6.0 - 19/12/2007 - PASS - 88% // SCWCD 5 - 17/05/2008 - PASS - 79% // SCJA - 09/09/2008 - PASS - 96% // SCSNI - 30/06/2009 - PASS - 68% // SCBCD 5 - 31/05/2010 - PASS - 95%
Próximos: SCJD (encalhado com o projeto), SCEA parte I (estudando). Algum dia desses: SCMAD, OCA, SCEA e SCDJWS.

Computação: uma ciência holística e esotérica!
E então veio Deus a terra e disse aos homens: Não dividireis por zero.
XML is a giant step in no direction at all. (Erik Naggum)
Arquitetura de sistemas: Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião formada sobre tudo.
Diga não as drogas: Não use java.util.Vector.
Cuidado: Este usuário pode ter temperamento agressivo.

Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
I am the maniac serial killer that knows where you live who will maintain your code.


É impossível falar de CMMI (Capability Maturity Model Integration) sem saber o que é CIMM (Capability Im-Maturity Model).


Se você escreve "concerteza", "concerteza" você andou matando aulas de português.
[MSN]
panthovillas
Debugger
[Avatar]

Membro desde: 06/02/2007 21:27:57
Mensagens: 72
Offline

tenta setar a memoria a ser utilizada: java -Xmx512m -jar arquivo.jar

[]'s
[MSN]
rmendes08
GUJ Master
[Avatar]

Membro desde: 29/05/2008 14:09:28
Mensagens: 1615
Offline

Geralmente stack overflow ocorre por causa de recursão infinita. Nesse caso aumentar a memória ja JVM não resolve muita coisa. Além de que eu acho que só é possível ajustar o tamanho do heap. O que pode ocasionar esse comportamento é alguma entrada que você não testou no ambiente de desenvolvimento mas que está no cliente.

"A Técnica é transformada em Arte por quem a emprega"

"O futuro pertence àqueles que acreditam na beleza de seus sonhos"

Computadores Fazem Arte

http://www.uaijug.com.br

"É importante estabelecer uma estrutura de alto nível, mas isso não significa criar uma infinidade de diagramas de classes detalhados."
panthovillas
Debugger
[Avatar]

Membro desde: 06/02/2007 21:27:57
Mensagens: 72
Offline

rmendes08 wrote:Geralmente stack overflow ocorre por causa de recursão infinita. Nesse caso aumentar a memória ja JVM não resolve muita coisa. Além de que eu acho que só é possível ajustar o tamanho do heap. O que pode ocasionar esse comportamento é alguma entrada que você não testou no ambiente de desenvolvimento mas que está no cliente.


nem sempre... ainda mais da forma como ele disse q sao as maquinas dos usuarios!!!
[MSN]
padcoe
Virtual Machine Man

Membro desde: 25/10/2008 07:30:15
Mensagens: 528
Offline

Aqui foi testada e a única execução desse processamento é uma query de select com parâmetros fixos, por isso foi testado aqui. A execução é a mesma. O problema lá é o ambiente, pra vc ter idéia, eu não consigo fazer deploy 2x sem antes matar a instância do OC4J.
juliocbq
GUJ Expert
[Avatar]

Membro desde: 13/11/2008 12:10:18
Mensagens: 3926
Offline

diegosantiviago wrote:tenta aumentar a memória nos arquivos de configuração

É a pilha do windows que não suporta mais de 8 megas. Tem que rever o código. Alguma variável alocada na stack, tá muito grande. Esse é o grande problema de ter memória gerenciada automaticamente.

This message was edited 1 time. Last update was at 05/03/2009 07:34:48


www.citrox.com.br
padcoe
Virtual Machine Man

Membro desde: 25/10/2008 07:30:15
Mensagens: 528
Offline

Que zuado...

Eu fiz uma alteração de processamento pq temos um fluxo, que pode retornar 40 mil registros e pra cada registro, estava sendo feita uma busca em outras tabelas. Mudei a query para realizar tudo de uma vez.

Vamos ver o que acontece e eu posto aqui

Valeu pela ajuda
eduveks
GUJ Ranger
[Avatar]

Membro desde: 19/04/2005 07:45:40
Mensagens: 831
Localização: Lisboa - Portugal
Offline

padcoe wrote:Que zuado...

Eu fiz uma alteração de processamento pq temos um fluxo, que pode retornar 40 mil registros e pra cada registro, estava sendo feita uma busca em outras tabelas. Mudei a query para realizar tudo de uma vez.

Vamos ver o que acontece e eu posto aqui

Valeu pela ajuda


Pois é, provavelmente vc esta executando uma query q retorna muita coisa, e vai tudo no ResultSet para a memória. Isto é muito mau! Vc tem que usar paginação! Não faz sentido uma query retornar mais que 1.000 registos, pois ninguem vai analisar mais do que 1.000 registos de uma vez, e mesmo assim é muito.

O que se deve fazer também é configurar na base de dados para limitar as queries para retornar no máximo 1000 registros.

Assim vc garante que nunca vai ter este probelma independente do tamanho das tabelas.

http://www.cajuscript.org
http://eduveks.blogspot.com
[Email] [WWW]
paty_trind
Virtual Machine Man

Membro desde: 15/11/2010 13:35:39
Mensagens: 736
Offline

Ola,
sei que o tópico é antigo mas estou com o mesmo problema =(
Alguém poderia me ajudar a encontar o erro no meu código?
Meu código é o seguinte:

Ah e o que eu estou tentando fazer é o seguinte:escrever uma função recursiva que determine o maior valor de um vetor usando o processo de bisseção, isto é, o vetor é dividido ao meio em dois subvetores e calcula-se o maior de cada um deles; o maior valor do vetor será o maior entre os dois valores apurados.

Obrigada pela ajuda

This message was edited 1 time. Last update was at 20/06/2011 12:38:42


Developer Java EE Jr.
eduveks
GUJ Ranger
[Avatar]

Membro desde: 19/04/2005 07:45:40
Mensagens: 831
Localização: Lisboa - Portugal
Offline

O valor da variável meio vai ser sempre igual em todas as interações da função recursiva. Então quando chega no if sempre vai ir a posição seguinte e a anterior referente ao meio, mas este meio nunca vai mudar, por que o vetor.length é constante.

Talvez o erro seja por que o calculo meio - 1 esteja dando menor que 0!

O melhor é vc rodar isto em debug e ver em cada interação qual o valor das variáveis ou jogar prints.

This message was edited 1 time. Last update was at 20/06/2011 12:53:44


http://www.cajuscript.org
http://eduveks.blogspot.com
[Email] [WWW]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team