源码分析—先看主干,再看分支 看源码,先看主干,把握主干,然后再看你自己关心的分支。 切记不要沿着源码一直一直点下来,这样很自己容易看蒙。 小技巧: 在源码中设置断点,然后按 F5 (进入方法中) 和 F6(向下执行)执行程序 在开源框架中,名字一般都是见名知意的,通过名字,可以大概知道方法的作用,从而选择是否跟进读 Servlet 源码分析 小技巧:使用 Maven 技术可以轻松查看...

HashMap内部实现原理

源码分析

  

2019-11-12 00:17:18

HashMap内部实现原理 在存储数据的时候,我们一般用数组或者链表来实现,不说数组和链表的效率问题,数组和链表都有其局限性,数组取值的时候是根据Index来找到对应数据,这个时候我们猜测一下,HashMap内部存储是数组加链表的方式来实现的。 查找HashMap的源码(先分析JDK 1.7) 先从get(key)方法中查找 如果传过来的key是空,则单独处理,如果不是空则取到对应的Entry,然...

虽然现在大家使用ListView的机会相对RecyclerView的机会较少,但官方并没有标注 ListView 类过期,哈哈,就说明它一定还是有他的特殊之处,这篇文章就来分析下,ListView的内部机制以及几个重要的点。 将从下面几个方面开始着手分析ListView,将会分两篇文章进行解析 类的继承关系 ListView 的构造方法 RecycleBin主要方法讲解 ListView 的绘制原...

1、概述 AsyncTask的作用:首先看看API中对AsyncTask的官方解释 上述这句话翻译的意思是:AsyncTask能够正确使用UI线程。允许您在UI线程上执行后台操作和发布结果,而不必操纵线程和/或处理程序 AsyncTask的主要方法: AsyncTask<Params, Progress, Result>: 继承AsyncTask需要传入三个参数类型;Params:后台...

1 概述 通过前面的文章(JUC--Condition学习(一)简介和使用),我们对Condition有了一个初步的认识,并且我们也知道了如何使用Condition,现在我们就来看一看Condition到底是如何实现线程的等待和唤醒的。 2 等待队列 在我们学习AQS的时候,我们知道当线程获取锁失败的时候会进入CLH队列,以等待状态(WAITING)存在于同步队列。而当我们调用Condition....

之前的几篇文章讲了Tomcat的启动过程,在默认的配置下启动完之后会看到后台实际上总共有6个线程在运行。即1个用户线程,剩下5个为守护线程(下图中的Daemon Thread)。 如果你对什么叫守护线程的概念比较陌生,这里再重复一下: 所谓守护线程,是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程。这种线程并不属于程序中不可或缺的部分,当所有的非守护线程结束时,程序也就终止了,同...

在上篇文章分析Tomcat7的各组件的init、start方法时经常会看到有一个setStateInternal方法的调用,在查看LifecycleBase类及其它各组件的源码时会在多处看到这个方法的调用,这篇文章就来说说这方法,以及与这个方法相关的Tomcat的Lifecycle机制和实现原理。   上篇文章里谈到Tomcat7的各组件的父类LifecycleBase类,该类实现了接口...

在一般的web应用开发里通常会使用开发工具(如Eclipse、IntelJ)集成tomcat,这样可以将web工程项目直接发布到tomcat中,然后一键启动。经常遇到的一种情况是直接修改一个类的源文件,此时开发工具会直接将编译后的class文件发布到tomcat的web工程里,但如果tomcat没有配置应用的自动加载功能的话,当前JVM中运行的class还是源文件修改之前编译好的class文件。可...

为什么关心Tomcat中一个web应用的加载过程?在前面的文章中看过多次Tomcat的组件结构图,这里再贴出来回顾一下: 之前的《Tomcat7启动分析》系列文章中看到Tomcat启动的时候将会解析server.xml,根据里面所配置的各个节点信息逐一初始化和启动相应组件(即分别调用它们的init和start方法),但浏览一下Tomcat7源码中的server.xml的内容,里面对应上图中的已经默...

通过前面的三篇文章看到了一次客户端连接在Tomcat内部被转换成了请求对象(org.apache.catalina.connector.Request类的实例),并在该请求对象内部将与本次请求相关的Host、Context、Wrapper对象的引用。本文主要分析该请求对象在容器内部流转的经过。 再来看一下Tomcat7内部的组件结构图: 其实这张图已经给出了答案,在Connector接收到一次连接...

先抛开之前所看到的Tomcat源码不谈,Tomcat作为一个用Java实现的Web服务器,如果让你来实现,那么从何入手? 这里首先需要厘清的是Web服务器的概念,谷歌了一下,发现这条解释还算靠谱点,【在网络环境下可以向发出请求的浏览器提供文档的程序】。这里面重点有两条,1.网络环境下,2.能够给出响应。用Java写过网络通信程序的都知道,这里必然会用到Socket编程。我们自己要实现的服务器程序作...

在默认的配置下Tomcat启动好之后会看到后台上总共有6个线程在运行。其中1个用户线程,剩下5个为守护线程(如下图所示)。 如果你对用户线程、守护线程等概念不熟悉,请参看前一篇文章——Tomcat7服务器关闭原理。 这里重点关注以http-bio-8080开头的两个守护线程(即http-bio-8080-Acceptor-0和http-bio-8080-AsyncTimeo...

 如上一篇文章所见Standard MBean在Tomcat的例子并不多,在jconsole中所看到的大量MBean(如Catalina下的Connector、Engine、Server、Service等),实际上是动态MBean(Dynamic MBean)。本文主要讲述Tomcat7中如何通过动态MBean的方式构造MBean的。   接触过动态MBean的朋友一定知道,它...

做过Java平台下的应用服务器监控的对JMX应该不会陌生,简单说,JMX就是提供了一个标准的管理方案的框架。这里所说的管理的含义包括监控平台运行状况、应用级别配置资源、收集应用统计数据、调试、监视服务器性能,JMX 允许你将所有的资源(硬件和软件)打包成java 对象,然后将他们暴露在分布式环境中,并且JMX 提供了一个机制,可以很简单的将既存的管理协议,如SNMP ,映射到JMX 自己的管理结构...