龙之队|一次线上JVM内存溢出分析,GC分析、MAT、gcviewer( 四 )


龙之队|一次线上JVM内存溢出分析,GC分析、MAT、gcviewer在Http11InputBuffer中我们可以查看到有一个init()方法
public class Http11InputBuffer implements InputBuffer, ApplicationBufferHandler {...public Http11InputBuffer(Request request, int headerBufferSize,boolean rejectIllegalHeaderName, HttpParser httpParser) {?this.request = request;headers = request.getMimeHeaders();?this.headerBufferSize = headerBufferSize;this.rejectIllegalHeaderName = rejectIllegalHeaderName;this.httpParser = httpParser;?filterLibrary = new InputFilter[0];activeFilters = new InputFilter[0];lastActiveFilter = -1;?parsingHeader = true;parsingRequestLine = true;parsingRequestLinePhase = 0;parsingRequestLineEol = false;parsingRequestLineStart = 0;parsingRequestLineQPos = -1;headerParsePos = HeaderParsePosition.HEADER_START;swallowInput = true;?inputStreamInputBuffer = new SocketInputBuffer();}...void init(SocketWrapperBase socketWrapper) {?wrapper = socketWrapper;wrapper.setAppReadBufHandler(this);?int bufLength = headerBufferSize +wrapper.getSocketBufferHandler().getReadBuffer().capacity();if (byteBuffer == null || byteBuffer.capacity() < bufLength) {// 创建了一个ByteBuffer , 而且它的长度是由headerBufferSize决定的byteBuffer = ByteBuffer.allocate(bufLength);byteBuffer.position(0).limit(0);}}...}?我们现在可以继续往上追溯
byteBuffer = ByteBuffer.allocate(bufLength); -> HeapByteBuffer
public abstract class ByteBuffer extends Buffer implements Comparable {...public static ByteBuffer allocate(int capacity) {if (capacity < 0)throw new IllegalArgumentException();return new HeapByteBuffer(capacity, capacity);}...}
class HeapByteBuffer extends ByteBuffer {?// For speed these fields are actually declared in X-Buffer;// these declarations are here as documentation/*?protected final byte[] hb;protected final int offset;?*/HeapByteBuffer(int cap, int lim) {// package-privatesuper(-1, 0, lim, cap, new byte[cap], 0);/*hb = new byte[cap];offset = 0;*/}}?到这里 , 我们终于找到byte[]创建的地方 。 按照之前的计算这里创建的byte数组长度为10240000+ , 还真的挺大的 。
最后 , 我们已经了解jvm占用byte[]数组过多的情况 , 且也了走了一遍tomcat的源码 , 对tomcat有更深入的了解 。


推荐阅读