2011-03-14 79 views
0

作为努力减少应用程序的内存负载的一部分,我们收集了一份hprof报告。该报告包括以下内容:Java的灰熊为缓冲区占用大量内存?

 
      percent   live   alloc'ed stack class 
rank self accum  bytes objs  bytes objs trace name 
    1 9.42% 9.42% 57414792 219 57414792 219 373093 byte[] 
    2 6.45% 15.87% 39328800 300 39328800 300 367689 byte[] 
    8 1.74% 30.92% 10618776 81 39328800 300 367958 byte[] 

相应的痕迹:

 
TRACE 373093: 
    java.nio.HeapByteBuffer.(HeapByteBuffer.java:39) 
    java.nio.ByteBuffer.allocate(ByteBuffer.java:312) 
    com.sun.enterprise.web.connector.grizzly.SocketChannelOutputBuffer.realWriteBytes(SocketChannelOutputBuffer.java:153) 
    com.sun.enterprise.web.connector.grizzly.SocketChannelOutputBuffer$NIOOutputStream.write(SocketChannelOutputBuffer.java:240) 

TRACE 367689: 
    java.nio.HeapByteBuffer.(HeapByteBuffer.java:39) 
    java.nio.ByteBuffer.allocate(ByteBuffer.java:312) 
    com.sun.enterprise.web.connector.grizzly.SocketChannelOutputBuffer.(SocketChannelOutputBuffer.java:100) 
    com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.initialize(DefaultProcessorTask.java:436) 

TRACE 367958: 
    java.nio.HeapByteBuffer.(HeapByteBuffer.java:39) 
    java.nio.ByteBuffer.allocate(ByteBuffer.java:312) 
    com.sun.enterprise.web.connector.grizzly.SocketChannelOutputBuffer.(SocketChannelOutputBuffer.java:100) 
    com.sun.enterprise.web.connector.grizzly.ssl.SSLOutputBuffer.(SSLOutputBuffer.java:59) 

任何人有任何想法,为什么灰熊是如此... .. uhmm饿了?

谢谢!

+0

这一切都发生在Glassfish V2.1.1服务器上。 – Yon 2011-03-14 17:59:21

回答

0

这些缓冲区用于从通道读取/写入。读缓冲区默认为8192字节。有一个输出缓冲区,其默认大小是16x。这些尺寸可根据您的需求进行调整,但多年来一般都是相当不错的默认值。