Erro de Thread em j2me

Olá pessoal.

Estou com o seguinte problema:

A minha aplicacao j2me conecta ao servidor para pegar alguns dados.
A conexão é realizada normalmente mas no final apresenta o seguinte erro:

Uncaught exception: java.lang.OutOfMemoryError

e não passa o argumento para a função que trata os dados.

import java.io.IOException;
import java.io.InputStream;
import java.util.Vector;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


/**
 * @author cm
 */
public class AcessoWeb implements Runnable{

    private HttpConnection objHttpConnection;
    private String url;
    private InputStream objInputStream;
    private Pessoa objPessoa;
    private Thread thread;
    private Vector vectorDados;

    public AcessoWeb(Pessoa objPessoa) {
        this.objPessoa = objPessoa;
    }

    public void run() {
        url = "http://localhost:8080/EstoqueWeb-war/ListaPessoas.jsp";
        System.out.println("Entrou no run");
        try {
            vectorDados = new Vector();
            String[] stringDados = new String[3];
            objHttpConnection = (HttpConnection) Connector.open(url);
            System.out.println("Entrou no try");
            if (objHttpConnection.getResponseCode() == HttpConnection.HTTP_OK) {
                objInputStream = objHttpConnection.openInputStream();
                int caracterLido = objInputStream.read();
                StringBuffer objStringBuffer = new StringBuffer();

                while (caracterLido != '^') {

                    while (caracterLido != ',') {
                        objStringBuffer.append((char) caracterLido);
                        caracterLido = objInputStream.read();
                    }
                    System.out.println(objStringBuffer.toString().trim());
                    stringDados[0] = objStringBuffer.toString().trim();
                    objStringBuffer.delete(0, objStringBuffer.length());
                    caracterLido = objInputStream.read();

                    while (caracterLido != ',') {
                        objStringBuffer.append((char) caracterLido);
                        caracterLido = objInputStream.read();
                    }
                    System.out.println(objStringBuffer.toString().trim());
                    stringDados[1] = objStringBuffer.toString().trim();
                    objStringBuffer.delete(0, objStringBuffer.length());
                    caracterLido = objInputStream.read();

                    while (caracterLido != '#') {
                        objStringBuffer.append((char) caracterLido);
                        caracterLido = objInputStream.read();
                    }
                    System.out.println(objStringBuffer.toString().trim());
                    stringDados[2] = objStringBuffer.toString().trim();
                    objStringBuffer.delete(0, objStringBuffer.length());
                    caracterLido = objInputStream.read();
                }
            } else {
                System.out.println("Sem conexão");
            }
        } catch (IOException io) {

        } catch (SecurityException se) {
        }
    }

    public void iniciaThread() {
        thread = new Thread(this);
        thread.start();
    }
}

o erro é este:

Uncaught exception: java.lang.OutOfMemoryError
(stack trace incomplete)

Esse erro acontece quando não há mais memória disponível para a JVM. Não olhei detalhadamente seu código, mas procure verificar em qual linha esse erro é lançado e tente rodar o garbage collector manualmente, para ver se ele consegue liberar espaço suficiente em memória para fazer o que você deseja.

o erro acontece quando eu chamo o metodo que ira tratar os dados

Se você tem certeza que seu programa passa dessa linha: objHttpConnection.close(); , o erro deve estar acontecendo justamente dentro de recebeDadosPessoa.
Dica: reescreava seu primeiro post colocando o código entre as tags code, fica mais fácil de entender e de mais alguém passar por aqui e te ajudar.

[quote=J-Chist]Se você tem certeza que seu programa passa dessa linha: objHttpConnection.close(); , o erro deve estar acontecendo justamente dentro de recebeDadosPessoa.
Dica: reescreava seu primeiro post colocando o código entre as tags code, fica mais fácil de entender e de mais alguém passar por aqui e te ajudar.

[/quote]

Coloquei o post como vc pediu

Coloca o código do recebeDadosPessoa, mas não tem jeito: você tem que fazer um debug e ver quem está comendo a memória.

É isso ai mesmo que o pessoal esta falando. Tem algo rodando de mais ou demasiadamente grande. Tens que analisar o contexto do teu código para descobrir.

Posta o printstack que da pra gente ter mais ou menos uma idéia de onde esta e te dar as coordenadas.

Abraço
Ricoldi

Notem que o cara não coloca aqui qual o tamanho do conteudo que ele mandou para o celular (Content-Length), que ele não inicializa o StringBuffer com um tamanho basico para receber o conteudo, forçando o buffer a ficar crescendo a cada append…

É realmente eu nem me atentei ao código, simplesmente pedi o Stack para ir direto ao ponto, visto que ele ajuda pra caramba a entender o motivo do erro né.

Pode ser que o erro nem esteja nesse trecho que ele postou não é.

É realmente eu nem me atentei ao código, simplesmente pedi o Stack para ir direto ao ponto, visto que ele ajuda pra caramba a entender o motivo do erro né.

Pode ser que o erro nem esteja nesse trecho que ele postou não é.[/quote]

Ele fica fazendo muita manipulação com objetos e isto pode estar dando o problema, com estas alocações e sem tempo para o GC liberar espaço…como ocorrem em pouco tempo, isto pode ser motivo do problema.

Outra coisa que pode ser é o tamanho do conteudo que tá vindo é grandão mesmo e com toda esta manipulacao (objetos, trim’s e delete’s) vai dar nisto que estamos vendo…