龙之队|一次线上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有更深入的了解 。
推荐阅读
- 潇湘晨报|34岁当医院院长,曾是当地“外科一把刀”,却因受贿贪污获刑十九年!第一次收钱连说几声谢谢
- 网慧验房|一次又一次被泼凉水,房价坚挺已经没用了,楼市“发烧”城市
- 烹饪|口感松软的培根肉松蛋糕,0失败新手学一次就会,美味又蓬松
- 东方网|地铁4号线上海火车站一乘客突发晕厥 接下来的一幕暖心了
- 美国人|李小龙的日本徒弟,终生为李小龙守墓,如今93岁依然每周扫墓一次
- 新华社|2020服贸会 | 线下线上“齐开工” 爱尔兰展商借服贸会拓市场
- 人健人爱官方号|糖友们注意了,别舍不得扔掉一次性注射针,当心因小失大
- 克里斯-保罗|再给你一次机会,你选3850万的神龟,还是3851万的保罗?
- 数字财经智库|而他的对手却成千亿富豪,许家印最失败的一次投资:3年巨亏40亿
- 今年8月|休闲食品业半年报观察:线上渠道增量明显
