- 浏览: 40183 次
- 性别:
- 来自: 杭州
文章列表
1、概念
Objdump:http://baike.baidu.com/view/4788477.htm
Gdb:http://baike.baidu.com/view/639266.htm(学习中,利器)
2、 流程演示
1)、编写java文件,new数组产生GC
2)、进行编译,开启gdb调试
3)、list命令,显示当前代码
4)、run命 ...
二、 编译openjdk
- 博客分类:
- jdk
、操作系统
1)、ubuntu的版本选择10.10
2)、安全操作系统选择英文,网络设置桥连接
2、安装必备软件
1)、sudo apt-get upgrade
2)、sudo apt-getupdate
3)、sudoapt-get install openssh-server(可选安装)
4)、sudoapt-get install v ...
一、 jdk中的jni方法解读
- 博客分类:
- jdk
我们现在常用的jvm虚拟机主要是hotspot,hotspot已经开源,所以大家可以下载到hotspot的源码进行学习和查看。
下面我就介绍一下jdk中的jni的方法解读
openjdk的官网http://openjdk.java.net/ ,里面搜索hotspot进行点击跳转到http://openjdk.java.net/groups/hotspot/ 然后点击【download】跳转到http://download.java.net/openjdk/jdk7/ 里面就可以下载jdk的源码了,下载之后进行解压。
代码下来之后就需要一个合适的工具去阅读,个人推荐sourc ...
1、(四十八中的2-5)CoyoteAdapter的service的剩下部分,针对request和response的finishRequest()。
2、(四十七中的2-5-5)AbstractHttp11Processor的process方法剩下部分,主要是更新输入输出流,更改request状态。
1、获取service为StandardService[Catalina]
2、获取container为StandardEngine[Catalina]
3、获取pipeline为Pipeline[StandardEngine[Catalina]]
4、GetFirst()为org.apache.catalina.core.StandardEngineValve[Catalina],步骤如下
(1)、内容如下,获取host和host的pipeline的getFirst
request.setAsyncSupported(connector.getService().getContainer().getPipeline().isAsyncSupported())
1、其中connector.getService().getContainer().getPipeline().isAsyncSupported()的方法内容如下。
是走StandardPipeline的isAsyncSupported方法,其中basic是StandardEngineValue其中里面的asyncSupported属性为true是在构建对象的时候设置的。
2、setAs ...
代码在CoyoteAdapter类中,这里面有4个参数org.apache.coyote.Request req,Request request,org.apache.coyote.Response res, Response response,其中req和res是adapter.service的参数,request和response是之后将要调用方法的参数。
1、判断req.scheme().isNull(),
(1)、如果为有值,则设置request.setSecure(req.scheme().equals("https"))。
其中adapter如上图描述,里面有个对象connector。
1、设置request对象和response对象。
2、如下图处理req请求。
(1)、设置处理这个request请求的工作线程名字http-
这部分是线程池里某一个线程的执行过程,如下图。代码参考JIoEndpoint.java
1、SSL handshake,serverSocketFactory.handshake(socket.getSocket()),里面没有方法执行。
2、state = handler.process(socket,SocketStatus.OPEN),(其中handler就是JIoEndpoint的属性,SocketProcessor属于内部类,所以属性共用,十五章中的1介绍过handler初始化),handler是Http11Protocol$Http11ConnectionHan ...
此章以后将会介绍,从socket接受到消息之后的处理过程,代码参考JIoEndpoint.java
线程如下图,是一个单独从socket接受消息的线程。
1、一个死循环一直接受socket的消息
2、countUpOrAwaitConnection(),判断是否已经达到连接数量默认200。
3、Socket socket = null,等待重新赋值,socket = serverSocketFactory.acceptSocket(serverSocket)。
4、setSocketOptions(socket)
server.xml中的属性shutdown=“SHUTDOWN”port=“8005”
1、await(),最终代码代码在StandardServer中。
(1)、awaitSocket = new ServerSocket(port, 1, InetAddress.getByName(address));其中port=8005,第三个属性= localhost/127.0.0.1。
(2
1、NamingContextListener,在此阶段没动作执行。
2、AprLifecycleListener,在此阶段没动作执行。
3、JasperListener,在此阶段没动作执行。
4、JreMemoryLeakPreventionListener,在此阶段没动作执行。
5、GlobalResourcesLifecycleListener,在此阶段没动作执行。
6、ThreadLocalLeakPreventionListener主要是registerListenersForServer(server)代码如下。
(1)、engine.addContainerL ...
其中MapperListener mapperListener = new MapperListener(mapper, this) Mapper mapper = new Mapper(),this=connector,代码在connector中。
1、mapper.addHost(host.getName(), aliases, host)
(1)、insertMap(hosts, newHosts, newHost),如下。
1)、在oldMap中找新元素的
HTTP/1.1与AJP/1.3,只是监听不同的端口,大体上都是相同的。下面介绍HTTP/1.1
HTTP/1.1如下图,connector继承了LifecycleBase,所以执行LifecycleBase的start方法。
当前对象图如下。
1、setStateInternal(LifecycleState.STARTING_PREP, null,false)
调用当前方法的对象是StandardEngine[Catalina],如下图。
1、创建一个daemon线程进行启动,如下图,主要是更换classLoader进行container.backgroundProcess()。系统的classLoader为catalinaLoader在第二章提到过,应用的classLoader为WebappClassLoader。
2、系统的后台程序如下图。主要是判断是否为null