Java.lang.OutOfMemoryError: Java heap space

30 respostas
cv1

Mas a sua JVM nao :wink:

Da uma olhada nos parametros de linha de comando (ou simplesmente procura no google por OutOfMemoryError)

30 Respostas

tmoretto

Aqui:

.../netbeans-x.x/etc/netbeans.conf

Quando você ver este arquivo vai deduzir os parâmetros para a JVM, -Xm?256M

É só aumentar o necessário.

Para saber o significado de cada um, veja em $ man java, ou procure na documentação da Sun o que cada um significa.

M

Tente com estas configurações

-Xms512m -Xmx800m -XX : PermSize=128m -XX:MaxPermSize=256m

OBS : Eu deixei separado o XX : PermSize, para não sair emotion, na sua configuração coloque-os juntos.

tRuNkSnEt

Observando o topico fui dar uma olhanda no HotSpot e achei isso. Muito doido por sinal!

Big Heaps and Intimate Shared Memory (ISM)

Se você precisa melhorar a performance da jvm vale dar uma olhada no link:

http://java.sun.com/docs/hotspot/VMOptions.html

Ah, voce nao sabe o que é HotSpot?

http://www.javafree.org/javabb/viewtopic.jbb?t=6776

tRuNkSnEt

So uma pergunta, o que voce esta tentando fazer que esta gerando esse erro?

tRuNkSnEt

Imaginei que fosse realmente em uma consulta. Geralmente quando esses erros acontecem e porque existe algum erro de logica afinal todas as configurações padrões do HotSpot já são suficientes.

Nesse caso eu aconselharia fazer paginação dos dados. Primeiro porque o usuario nunca vai olhar todos esses registro e segundo porque ficaria bem mais rapido mesmo que você aumente o tamanho da heap.

select  * from tabela offset 10 limit 10

Essa query por exemplo faz o que eu te falei no banco de dados postgreSQL. Ela pega um limite de 10 registro a começar pelo decimo registro do total de registro.

No firebird seria: select first 10 skip 10 * from tabela;

Se você estiver utilizando algum framework OR tipo o Hibernate é possível tambem.

HibernateUtil.getSession().createCriteria(MinhaClasse.class) .addOrder(Order.desc("id")) .setFirstResult(10) .setMaxResults(10) .list();

Até …

A

Code:

select * from tabela offset 10 limit 10

Essa query por exemplo faz o que eu te falei no banco de dados postgreSQL. Ela pega um limite de 10 registro a começar pelo decimo registro do total de registro.

No firebird seria: Code:

select first 10 skip 10 * from tabela;

como eu faço isso no oracle??? via SQL??

mister_m

SELECT *
FROM
(SELECT *
FROM TABELA)
WHERE ROWNUM BETWEEN 10 AND 19

A

nao funciona!!!

liclopes

Análise Top-N
É vantajoso e eficiente usar o recurso de consultas Top-N, onde se faz uma sub-consulta (view em-linha) ordenada pelo critério desejado, como fonte para uma consulta externa onde se usa a pseudo-coluna ROWNUM para limitar a quantidade de linhas no resultado.

forma geral:

select * from 
( select * from tabela
   order by critério )
 where ROWNUM <= :N;

Ex.:

select * from 
( select a.*, rownum rnum from 
    (select  'numero '||rownum campo 
  from all_tables 
  ) a 
where rownum <= 30 ) 
 where rnum >= 10

Paginação
Consultas paginadas, comuns no ambiente web, caracterizadas pela exibição gradual de resultados (quantidade por página). Se a cada página são exibidas M linhas resultantes, na primeira página exibem-se as linhas 1 a M, na página 2 as linhas M+1 a 2M, na página P as linhas (P-1)M+1 a PM. Para isso, basta fazer uma consulta top-N para selecionar as primeiras PM linhas (LINHA_FINAL), aninhada em uma consulta mais externa que descarte as (P-1)*M primeiras linhas (LINHA INICIAL).

forma geral:

select * from 
( select /*+ FIRST_ROWS(n) */
  topn.*, ROWNUM rnum
      from ( sua_consulta_entra_aqui,
             order by critério, ROWID ) topn
      where ROWNUM <= :LINHA_FINAL )
where rnum  > :LINHA_INICIAL;

Ex.:

select * from 
( select /*+ FIRST_ROWS(20) */ 
  topn.*, ROWNUM rnum from 
      ( SELECT  DR.CAMPO1, DR.CAMPO2, DR.CAMPO3 
                FROM TABELA1 DR 
             order BY ROWID ) topn 
      where ROWNUM <= 40 ) -- LINHA FINAL 
where rnum  >= 21 -- LINHA INICIAL

Função de Paginação em consulta (JAVA+ORACLE)

Retorna uma consulta paginada
Parametro strQuery consulta original; Parametro pagina página que deseja retornar; Parametro elementos quantidade de registros por página; Returno String.

public String paginar(String strQuery, int pagina, int elementos) {
if (pagina> 1) {
pagina = (pagina- 1) * elementos+ 1;
} else {
pagina = (pagina- 1) * elementos;
}

         return (?SELECT * FROM (SELECT a.*, rownum rnum FROM (? +
                           strQuery + ?) a WHERE rownum <= ? + (pagina + elementos) + ?) ? +
                           ?WHERE rnum >= ? + pagina);
}
V

Eliezer Reis:
Observando o topico fui dar uma olhanda no HotSpot e achei isso. Muito doido por sinal!

Big Heaps and Intimate Shared Memory (ISM)

Se você precisa melhorar a performance da jvm vale dar uma olhada no link:

http://java.sun.com/docs/hotspot/VMOptions.html

Ah, voce nao sabe o que é HotSpot?

http://www.javafree.org/javabb/viewtopic.jbb?t=6776

Ola!

Vi o help que você deu quanto ao erro de heap space.

Eu também estou com o mesmo erro, porém estou compilando o JME e ta dando
java.lang.OutOfMemoryError: Java heap space

Ja fiz os procedimentos de aumentar memória JVM e nada de funfar…você tem alguma idéia do que possa ser?

Abraços.

Vera.

MarcosOLIVEIRA

Aew pessoal estou o mesmo problema!!

java.lang.OutOfMemoryError: Java heap space!

acho que pode ser como nosso amigo Eliezer diz. tenho banco que possui em torno de 1500 resultados por tabela e quando passo de 1200 ele começa a dar esse erro. oque fazer??? uso o mysql, existe este tipo se seleçao por linhas no mysql?
ou o erro esta em outro lugar?

stacktrace:

SEVERE: Servlet.service() for servlet GerarMapa threw exception
java.lang.NullPointerException
	at com.mysql.jdbc.ConnectionImpl.registerStatement(ConnectionImpl.java:4321)
	at com.mysql.jdbc.StatementImpl.<init>(StatementImpl.java:275)
	at com.mysql.jdbc.ConnectionImpl.createStatement(ConnectionImpl.java:2382)
	at Conexao.executeSQL(Conexao.java:58)
	at GerarMapa.doPost(GerarMapa.java:73)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)
07/07/2009 11:50:54 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet GerarMapa threw exception
java.lang.OutOfMemoryError: Java heap space
07/07/2009 11:50:54 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet GerarMapa threw exception
java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Unknown Source)
	at java.lang.String.<init>(Unknown Source)
	at com.mysql.jdbc.SingleByteCharsetConverter.toString(SingleByteCharsetConverter.java:327)
	at com.mysql.jdbc.ResultSetRow.getString(ResultSetRow.java:787)
	at com.mysql.jdbc.ByteArrayRow.getString(ByteArrayRow.java:67)
	at com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5571)
	at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5448)
	at com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5488)
	at GerarMapa.doPost(GerarMapa.java:78)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)
Focao

Procure ver:

// 1º quanto tem ?
System.out.println(Runtime.getRuntime().maxMemory());
//2º quanto estou usando ?
System.out.println(Runtime.getRuntime().totalMemory());
//quanto ainda tem ?
System.out.println(Runtime.getRuntime().freeMemory());
MarcosOLIVEIRA

Realmente deu o estouro de memoria olha o so o ultimo resultado antes do erro:

1º quanto tem ? :66650112
2º quanto estou usando ?:66650112
3 quanto ainda tem ?:62376

como faço pra reutilzar a memoria ja usada uma ver que nao estou utilizando tanta memora assim?

aqui vai o codigo da minha servlet que causa o estouro da memoria:

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;




public class GerarMapa extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private Conexao conexao;
	private String lon; 
	private String lat;
	private String codigoDet; 
	private PrintWriter out;
	
    public GerarMapa() {
    	super();
        conexao = new Conexao();
        conexao.conecta();
           
       
    }
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		  
		 System.out.println("1º quanto tem ? :"+Runtime.getRuntime().maxMemory());  
		 
		 System.out.println("2º quanto estou usando ?:"+Runtime.getRuntime().totalMemory());  
		 
		System.out.println("3 quanto ainda tem ?:"+Runtime.getRuntime().freeMemory()); 

		codigoDet = "02";//request.getParameter("codigo"); 
		
		if(codigoDet!=null){
		
		 out = response.getWriter();
		
		 
			if(codigoDet!=""){	
				
				
				conexao.executeSQL("SELECT latitude, longitude from dbtech.rastreamento where codigoDetento = '"+codigoDet+"'");
			  
			 	try{
					 conexao.resultset.last();
					 lat = conexao.resultset.getString("latitude");
					 lon = conexao.resultset.getString("longitude");
					 out.write(lat+"!"+lon);
				}catch(SQLException ex){
					ex.printStackTrace();
			 	}
			}
			
			
		 }	
	}

}
I

Opa, bom dia pessoal. Tudo bem?

Quanto de memória o servidor tem?

Aumente o xmx para 1024 e reinicie a JVM. Veja se vai parar.

MarcosOLIVEIRA

Cara, ja resolvi esse erro.

é necessario fechar a conexao com o BD depois de cada query. como eu não estava fechando, estourava a memoria com os resultset que eram armazenados enquanto o Garbage Collector não passava.

Erro simples de prograçao

comedor_de_folhas

galera…eu ainda nao saquei!

eu fiz o :

// 1º quanto tem ?
		System.out.println("----->"+Runtime.getRuntime().maxMemory());
		//2º quanto estou usando ?
		System.out.println("----->"+Runtime.getRuntime().totalMemory());
		//quanto ainda tem ?
		System.out.println("----->"+Runtime.getRuntime().freeMemory());

meu resultado foi esse:
----->259522560
----->239419392
----->184755472

eu uso o eclipse aqui…como eu aumento a memoria??? nao é em algum dos arquivos de configuração do tomcat???

MarcosOLIVEIRA

Posta o teu erro completo aqui.
e o codigo onde ta dando erro

comedor_de_folhas

MarcosOLIVEIRA:
Posta o teu erro completo aqui.
e o codigo onde ta dando erro

basicamente o erro ocorre quando eu tento fazer um upload de um video atraves do componente JSF rich:fileUpload

quando eu faço upload de videos pequenos, não dá erro, quanto tento algum video de 100 megas aparece esse erro:

16:09:04,344 ERROR BaseXMLFilter:199 - Exception in the filter chain
javax.servlet.ServletException: Servlet execution threw an exception
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:313)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
	at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
	at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:367)
	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Arrays.java:2786)
	at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:94)
	at org.ajax4jsf.request.MultipartRequest$FileParam.appendData(MultipartRequest.java:244)
	at org.ajax4jsf.request.MultipartRequest.readData(MultipartRequest.java:468)
	at org.ajax4jsf.request.MultipartRequest.readNext(MultipartRequest.java:428)
	at org.ajax4jsf.request.MultipartRequest.parseRequest(MultipartRequest.java:619)
	at org.richfaces.component.FileUploadPhaselistener.beforePhase(FileUploadPhaselistener.java:63)
	at com.sun.faces.lifecycle.Phase.handleBeforePhase(Phase.java:214)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:96)
	at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:102)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	... 17 more
08/07/2010 16:09:04 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Arrays.java:2786)
	at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:94)
	at org.ajax4jsf.request.MultipartRequest$FileParam.appendData(MultipartRequest.java:244)
	at org.ajax4jsf.request.MultipartRequest.readData(MultipartRequest.java:468)
	at org.ajax4jsf.request.MultipartRequest.readNext(MultipartRequest.java:428)
	at org.ajax4jsf.request.MultipartRequest.parseRequest(MultipartRequest.java:619)
	at org.richfaces.component.FileUploadPhaselistener.beforePhase(FileUploadPhaselistener.java:63)
	at com.sun.faces.lifecycle.Phase.handleBeforePhase(Phase.java:214)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:96)
	at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:102)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
	at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
	at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:367)
	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:619)

o q pode estar errado???

MarcosOLIVEIRA

O que pode estar ocorrendo é que voce esta colocando o video todo em memoria antes de fazer o upload.

assim “estourando” a memoria.

talvez se voce criasse um buffer que le parte do arquivo que esta no disco, e envia por partes sem instanciar o arquivo em memoria, possa resolver.

acho que no seu bean deve ter algum metodo que faça o carregamento do video…
se sim, isso pode ajudar

File arquivo = //o arquivo que voce quer mandar
 FileInputStream  fileIn  = new FileInputStream(arquivo);
 BufferedInputStream buffIn = new BufferedInputStream(fileIn);
 int tamanho;
 byte[] buffer = new byte[1024];//pode ser qualqer tamano que voce quiser

              while ((tamanho = buffIn.read(buffer)) != -1) {
                   
                   
                 //aqui voce envia o buffer que é a divisao do arquivo

                }

Parece um pouco complicado mesmo… Mas ja fiz isso usando sockets para envio de arquivos pela rede.
talvez a ideia te ajude mais que o codigo.

comedor_de_folhas

MarcosOLIVEIRA:
O que pode estar ocorrendo é que voce esta colocando o video todo em memoria antes de fazer o upload.

assim “estourando” a memoria.

talvez se voce criasse um buffer que le parte do arquivo que esta no disco, e envia por partes sem instanciar o arquivo em memoria, possa resolver.

acho que no seu bean deve ter algum metodo que faça o carregamento do video…
se sim, isso pode ajudar

File arquivo = //o arquivo que voce quer mandar
 FileInputStream  fileIn  = new FileInputStream(arquivo);
 BufferedInputStream buffIn = new BufferedInputStream(fileIn);
 int tamanho;
 byte[] buffer = new byte[1024];//pode ser qualqer tamano que voce quiser

              while ((tamanho = buffIn.read(buffer)) != -1) {
                   
                   
                 //aqui voce envia o buffer que é a divisao do arquivo

                }

Parece um pouco complicado mesmo… Mas ja fiz isso usando sockets para envio de arquivos pela rede.
talvez a ideia te ajude mais que o codigo.

esse é meu método :

public String acaoUpdate(UploadEvent evento) throws FileNotFoundException{
		System.out.println("----->acaoUpdate()");
		System.out.println("----->var medidor é: "+ isMedidor());		
		this.medidor = true;
		System.out.println("----->var medidor agora é: "+isMedidor());		
		
		
		FacesContext fc = FacesContext.getCurrentInstance();
		ServletContext sc = (ServletContext)fc.getExternalContext().getContext();
		String realTargetPath = sc.getRealPath("/");
		UploadItem item = evento.getUploadItem();
		String filePathName = item.getFileName();
		String fileName = "";
		StringTokenizer st  = new StringTokenizer(filePathName,"\");
		
		while(st.hasMoreElements()){
			fileName = st.nextToken();
		}
		
		realTargetPath = realTargetPath + "REPOSITORIO_VIDEOS\"+fileName;
		OutputStream out = new FileOutputStream(realTargetPath);
		try{
			out.write(item.getData());
			out.close();
			
			
		}catch(IOException e){
			System.out.println("-----> msg de erro da exeption: ");
			System.out.println(e);
		}
		
		this.nomeReal = fileName;
		this.urlVideo = "http://localhost:8080/TV_BD/REPOSITORIO_VIDEOS/"+this.nomeReal;
		
		
		System.out.println("-----> O arquivo foi enviado para\n"+realTargetPath);
		System.out.println("-----> A URL do video é: "+this.urlVideo);
	
		
		return "cadastro";

		
	}

eu devo incluir sua logica dentro do meu try?

try{
			out.write(item.getData());
			out.close();
			
			
		}
MarcosOLIVEIRA

Ao inves de colocar out.write(-----) com o dado inteiro tu vai criar o buffer que vai mandar os pedaços do teu arquivo.
Cara, primeiro tu vai instanciar o teu arquivo como File e criar o buffer

o out.write tu vai colocar dentro do while que te passei.

oque ele vai fazer é:

1- abrir uma stream de leitura para o arquivo

FileInputStream  fileIn  = new FileInputStream(arquivo);

2 - BufferedInputStream de leitura do arquivo
3 - Intanciar o buffer com um tamanho qualquer que voce queira enviar por vez, sem que estoure a memoria

byte[] buffer = new byte[1024];

4 - um tamanho que é um indicador se chegou ao fim da stream de leitura

5 - while: enquanto nao encher o buffe, joga os dados dentro do buffer saindo do buffIn que esta lendo o arquivo.

quando cheio

out.write(buffer)

out.close()

espero ter ajudado

M

opa
tenho este problema de memoria tambem num relatorio meu
mas nao posso limitar o sql com offset e limit porque preciso realmente listar todos os dados
o que fazer ?
obrigado

M

nada ?

E

Pessoal estou com um erro parecido, não consigo reolver por nada

veja o codigo

log catalina.out:   
May 23, 2011 9:43:32 AM com.sun.faces.context.SessionMap put   
WARNING: JSF1063: WARNING! Setting non-serializable attribute value into HttpSession (key: albumVisualizacaoMB, value class: apresentacao.AlbumVisualizacaoMB).   
May 23, 2011 9:43:32 AM org.primefaces.util.ComponentUtils findClientIds   
INFO: Cannot find component with identifier "dlgFotoGrande" in view.   
May 23, 2011 9:43:33 AM org.apache.catalina.core.StandardWrapperValve invoke   
SEVERE: Servlet.service() for servlet Faces Servlet threw exception   
java.lang.NullPointerException   
at com.sun.faces.context.flash.ELFlash.getPhaseMapForReading(ELFlash.java:748)   
at com.sun.faces.context.flash.ELFlash.isEmpty(ELFlash.java:466)   
at com.sun.faces.facelets.util.DevTools.writeVariables(DevTools.java:318)   
at com.sun.faces.facelets.util.DevTools.writeVariables(DevTools.java:208)   
at com.sun.faces.facelets.util.DevTools.debugHtml(DevTools.java:123)   
at com.sun.faces.renderkit.RenderKitUtils.renderHtmlErrorPage(RenderKitUtils.java:1139)   
at com.sun.faces.context.ExceptionHandlerImpl.throwIt(ExceptionHandlerImpl.java:249)   
at com.sun.faces.context.ExceptionHandlerImpl.handle(ExceptionHandlerImpl.java:136)   
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:119)   
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)   
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:313)   
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)   
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)   
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)   
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)   
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)   
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)   
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)   
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)   
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)   
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)   
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)   
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)   
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)   
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)   
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698)   
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891)   
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)   
at java.lang.Thread.run(Thread.java:619)  
May 23, 2011 9:52:21 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
java.lang.OutOfMemoryError: GC overhead limit exceeded

este é o log em produção pois em desenvolvimento nao da este problema…

no browser da a menssagem Java heap space - java.lang.OutOfMemoryError: Java heap space

E

^^

raikk0n3n

Como resolvo isso no netbeans???

o erro

Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space

minha maquina tem 1 gb de memoria!!!

raikk0n3n

Como faço pra aumentar a memoria da VM no netbeans

raikk0n3n

aumentei a memoria ainda continua com o mesmo problema, o q pode ser

raikk0n3n

Um result numa JTable numa base de dados com mais de 5.000 linhas!!!

raikk0n3n

Funcionou filé

Criado 17 de outubro de 2006
Ultima resposta 19 de out. de 2006
Respostas 30
Participantes 15