所有,

我在运行程序时使用以下VM开关 . 该程序具有已知的内存泄漏 .

最初堆已满,我理解OutOfMemoryError的原因 . 但是后来(124.283),一个完整的GC回收了一些空间 . 那么为什么我仍然得到OutOfMemoryError?

提前致谢

VM参数

-XX:PrintGCTimeStamps -XX:PrintGCDetails -Xms32m -Xmx32m

这是GC数据


堆满了


123.540:[完整GC 123.540:[终身:21888K-> 21887K(21888K),0.1215501秒] 31679K-> 31679K(31680K),[Perm:2054K-> 2054K(12288K)],0.1216037秒] [时间:用户= 0.13 sys = 0.00,实= 0.13秒] 123.665:[全GC 123.665:[终止:21887K-> 21887K(21888K),0.1504579秒] 31679K-> 31575K(31680K),[Perm:2054K-> 2054K(12288K)], 0.1505627秒] [时间:用户= 0.16 sys = 0.00,实际= 0.16秒]线程中的异常“RMI TCP连接(空闲)”java.lang.OutOfMemoryError:Java堆空间线程“AWT-EventQueue-0”java中的异常 . lang.NullPointerException:在sun.java2d.windows.GDIWindowSurfaceData.initOps(本地方法)处的sun.java2d.windows.GDIWindowSurfaceData . (未知来源)处于阳光下的sun.java2d.windows.GDIWindowSurfaceData.createData(未知来源)处理组件 . 在sun.awt.windows.WCompone的sun.java2d.d3d.D3DScreenUpdateManager.createScreenSurface(未知来源)sun.java2d.ScreenUpdateManager.createScreenSurface(未知来源)的awt.Win32GraphicsConfig.createSurfaceData(未知来源)位于javax的javax.swing.RepaintManager.seqPaintDirtyRegions(未知来源)的sun.awt.windows.WComponentPeer $ 2.run(未知来源)的sun.awt.windows.WComponentPeer.replaceSurfaceData(未知来源)的ntPeer.replaceSurfaceData(未知来源) .swing.SystemEventQueueUtilities $ java.awt.event上的java.awt.event.InvocationEvent.dispatch(Unknown Source)中的$ ComponentWorkRequest.run(未知来源)java.awt.EventDispatchThread.pumpOneEventForFilters(未知来源)的java.awt.EventQueue.dispatchEvent(未知来源) java.awt.EventDispatchThread.pumpEventsForFilter(未知来源)java.awt.EventDispatchThread.pumpEvents(未知来源)java.awt.EventDispatchThread.pumpEvents .awt.EventDispatchThread.run(Unknown Source)123.829:[Full GC 123.829:[Tenured:21887K-> 21887K(21888K),0.1306163 secs] 31679K-> 30695K(31680K),[Perm:2056K-> 2056K(12288K)] ,0.1306809秒] [时间:用户= 0.13 sys = 0.00,实际= 0.13秒]线程“RMI TCP连接(空闲)”中的异常java.lang.OutOfMemoryError:Java堆空间线程中的异常“RMI TCP连接(空闲)”java.lang.OutOfMemoryError:Java堆空间124.040:[Full GC 124.040:[终身: 21888K-> 21887K(21888K),0.1259948 secs] 31680K-> 27400K(31680K),[Perm:2057K-> 2057K(12288K)],0.1260596 secs] [次:用户= 0.13 sys = 0.00,real = 0.13 secs]


在以下完整GC中回收堆内存


124.283:[完整GC 124.283:[终身:21888K-> 15215K(21888K),0.0945810秒] 31680K-> 15215K(31680K),[Perm:2057K-> 2055K(12288K)],0.0946383 secs] [次:用户= 0.09 sys = 0.00,real = 0.09 secs] 124.829:[GC 124.829:[DefNew:8704K-> 988K(9792K),0.0079326 secs] 23919K-> 16203K(31680K),0.0079854 secs] [次:用户= 0.00 sys = 0.00,实际值= 0.00秒]线程“RMI TCP连接(空闲)”中的异常java.lang.OutOfMemoryError:Java堆空间线程中的异常“RMI TCP连接(空闲)”java.lang.OutOfMemoryError:Java堆空间线程中的异常“RMI TCP连接(空闲)“java.lang.OutOfMemoryError:Java堆空间线程中的异常”RMI TCP连接(空闲)“java.lang.OutOfMemoryError:Java堆空间线程”RMI TCP连接(空闲)“java.lang中的异常 . OutOfMemoryError:Java堆空间线程中的异常“RMI TCP连接(空闲)”java.lang.OutOfMemoryError:Java堆空间线程中的异常“RMI TCP连接(空闲)”java.lang.OutOfMemoryError:Java堆空间线程中的异常“RMI TCP连接(空闲)”java.lang.OutOfMemoryError:Java堆空间线程中的异常“RMI TCP连接(空闲)”java.lang.OutOfMemoryError:Java堆空间