Java堆OutOfMemoryError

时间:2016-02-18 12:15:38

标签: java

我正在创建一个流式应用程序,当我流式传输到我的客户端时,客户端会抛出一个OutOfMemoryError。 My Heap只有6MB大,我将最大堆大小增加到1GB。是否有可能当我填充缓存时,填充速度太快(对于GC?)?或者可能是什么问题?有什么想法吗?

它崩溃了(准确地说是第一行):

byte[] songData = new byte[length];
ByteBuffer dataBuffer = ByteBuffer.wrap(packet.getData(), SongDatagram.HEADER_SIZE, length);
dataBuffer.get(songData);
DataPacket dataPacket = new DataPacket(songData);
putIntoCache(dataPacket);

此代码执行了几千次,因为我将歌曲分成大约1KB的数据包,并用SequenceNr排序的这些数据包填充TreeSet(缓存)。

我正在分析EMA上的转储,但正如我所说的堆只有6 MB(我明白,即使有内存泄漏,当我超过1 GB的最大堆大小时它会崩溃。)

错误

Exception in thread "Thread-5" java.lang.OutOfMemoryError: Java heap space
at utils.networking.SongDatagramBuilder.convertToSongDatagram(SongDatagramBuilder.java:108)
at controllers.networking.streaming.MusicStreamingService.listen(MusicStreamingService.java:142)
at controllers.networking.streaming.MusicStreamingService$$Lambda$59/369920468.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)space

0 个答案:

没有答案