Java.lang.OutOfMemoryError: Java heap space

[quote=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.

[/quote]

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();
			
			
		}

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

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

nada ?

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

^^

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!!!

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

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

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

Funcionou filé