`
阿凡提学计算机
  • 浏览: 40183 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
文章列表

三、Debug调试openjdk

    博客分类:
  • jdk
 
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 ...
我们现在常用的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
Global site tag (gtag.js) - Google Analytics