2012-09-08 5 views
0

Xuggler로 비디오 파일을 디코딩하고 재생할 때 문제가 있습니다. 큰 파일 (2GB)에서 작은 파일 (20MB)에 이르는 avi 및 mkv로 시도한 결과, 모두 동일한 결과를 얻었습니다. 동영상의 임의 이미지가 창에 표시되고 오류가 발생합니다 :java.lang.OutOfMemoryError : -Xmx1024m을 사용하는 Java 힙 공간

Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space 
at com.xuggle.xuggler.video.BgrConverter.toImage(BgrConverter.java:182) 
at com.xuggle.xuggler.Utils.videoPictureToImage(Utils.java:322) 
at testxuggler.VideoWindow.showVideo(VideoWindow.java:324) 
at testxuggler.MenuBarre$4.actionPerformed(MenuBarre.java:263) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) 
at javax.swing.AbstractButton.doClick(AbstractButton.java:357) 
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1223) 
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1264) 
at java.awt.Component.processMouseEvent(Component.java:6267) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) 
at java.awt.Component.processEvent(Component.java:6032) 
at java.awt.Container.processEvent(Container.java:2041) 
at java.awt.Component.dispatchEventImpl(Component.java:4630) 
at java.awt.Container.dispatchEventImpl(Container.java:2099) 
at java.awt.Component.dispatchEvent(Component.java:4460) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) 
at java.awt.Container.dispatchEventImpl(Container.java:2085) 
at java.awt.Window.dispatchEventImpl(Window.java:2478) 
at java.awt.Component.dispatchEvent(Component.java:4460) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 

라인 : BufferedImage javaImage = Utils.videoPictureToImage (newPic); 오류가 발생했습니다

실행 명령 줄에 -Xms128m -Xmx1024m 줄을 추가하여 메모리 크기를 변경하려고했습니다. 어떤 도움 DecodeAndPlayVideo.java

감사 :

내가 사용되는 코드는 여기 튜토리얼의 코드입니다!

+0

힙 크기를 늘려 보셨습니까? -Xmx2g 예를 들면? –

+0

더 많은 코드를 보지 않고도 의미있는 대답을 줄 수는 없다고 생각합니다. –

답변

0

OOM은 새로운 객체의 할당을 위해 JVM에서 사용할 수있는 메모리가 더 이상 없음을 의미합니다. OOM 예외를 수반하는 Stacktrace는 이러한 할당이 요청 된 위치를 가리 킵니다. 보통 누가 모든 메모리를 누가, 왜 소비했는지에 대해서는 말하지 않습니다.

은 OOM 2 가장 일반적인 이유가 있습니다 : 당신의 알고리즘을 처리하려고하는 데이터의 양에 대한

  1. 메모리 부족
  2. 메모리가을 누설

첫 번째 문제는 증가 하나 해결 될 수있다 힙 크기를 Xmx 시작 매개 변수 (쉬운 것) 또는 알고리즘을 변경하여 (단단한 것).

두 번째 문제는 다양한 방법으로 해결할 수 있습니다. 하나는 메모리 누수 모니터링 도구 Plumbr을 사용하는 것입니다.

관련 문제