talvez uma recursão que não acabou, talvez um laço infinito… cadê o código?
P
padcoe
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
J
juliocbq
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.
D
diegosantiviago
tenta aumentar a memória nos arquivos de configuração
V
victorwss
Estranho que a recursão ocorre dentro do toplink.
Primeira coisa a tentar, vê se a versão do toplink é a mais atual.
P
panthovillas
tenta setar a memoria a ser utilizada: java -Xmx512m -jar arquivo.jar
[]'s
R
rmendes08
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.
P
panthovillas
nem sempre… ainda mais da forma como ele disse q sao as maquinas dos usuarios!!!
P
padcoe
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.
J
juliocbq
É 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.
P
padcoe
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
E
eduveks
padcoe:
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 :D
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.
P
paty_trind
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
E
eduveks
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.
P
paty_trind
consegui resolver!!!
Obrigada pela ajuda
tinhas razão so mudei o valor da variavel meio e criei uma outra variavel para representar o final do vetor!