自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 收藏
  • 关注

原创 SpringIOC源码阅读笔记(3)

上篇笔记写到解析element分为解析默认标签以及自定义标签,本文就先从默认标签开始。public static final String IMPORT_ELEMENT = "import";public static final String ALIAS_ATTRIBUTE = "alias";//beanpublic static final String BEAN_ELEMENT = BeanDefinitionParserDelegate.BEAN_ELEMENT;public stati

2020-05-29 17:08:13 189

原创 SpringIOC源码阅读笔记(2)

整个ioc的过程可以分为3个步骤:1.资源定位,根据location找到对应的资源。2.装载,将资源解析到对应的beanDefinition。3.注册,将beanDefinition中的对象注册进容器。给一个简单的例子,后面的分析也将从这个例子中展开BeanFactory bf= new XmlBeanFactory(new ClassPathResource(“beanFactory.xml”))classpathresource的定位就不细说了,//XmlBeanFactory的主要实现都

2020-05-28 22:51:07 186

原创 SpringIOC源码阅读笔记(1)

刚看完springMVC的源码,感觉spring的容器源码还是掌握不到位,所以打算写一点笔记再理一遍思路。一.Resourcespring给资源提供了封装,根据不同的资源类型有不同的实现类,首先先看下UML图:1.org.springframework.core.io.InputStreamSource顶层接口,其中就定义了一个方法获取输入流:InputStream getInputStream() throws IOException2.org.springframework.core.io

2020-05-28 14:02:56 288

原创 SpringMVC源码解析笔记(2)

3.DispatcherServlet的逻辑处理在HttpServlet中提供了相应的服务方法,比较常用的就是doGet()和doPost(),而在DispatcherServlet中都是通过父类FrameworkServlet来实现,例如: @Override protected final void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOExcept

2020-05-28 10:27:09 227

原创 SpringMVC源码解析笔记(1)

**注:为了代码清晰易读,分析代码的过程将会删去日志实现以及异常处理(这些代码也很重要,具体可以看源码)。1.ContextLoaderListener初始接口java.util.EventListener,是个空接口,标志着这是个事件监听器。实现了接口javax.servlet.ServletContextListener,能够监听ServletContext对象的生命周期,实际上就是监听Web应用的生命周期。Servlet容器启动或者终止Web应用的时候,就会触发ServletContextEve

2020-05-27 15:50:37 282

原创 JDK1.8源码阅读(6)--Error/Exception/Class

JDK1.8源码阅读(6)–Error/Exception/Class一.Error类类图:Error类继承于Throwable类static final long serialVersionUID = 4980196508277280342L; 序列号public Error()构造方法,这里用的是父类Throwable的构造方法 public Error() { ...

2020-03-05 16:56:39 339

原创 JDK1.8源码阅读(5)--ThreadLocal/Enum/Throwable

JDK1.8源码阅读(4)–一.ThreadLocal类类图:这个类并没有继承其他的类或接口。private final int threadLocalHashCode = nextHashCode(); 原始种子,由内置种子计算而来,用来生成均匀的索引一个线程可以有多个ThreadLocal实例,各实例之内的原始种子值不相同一个ThreadLocal实例也可被多个线程共享,此时多个线...

2020-03-04 22:45:17 421

原创 JDK1.8源码阅读(4)--Long/Short/Thread

JDK1.8源码阅读(4)–一.Long类类图:Long类继承于Number抽象类和接口ComparableLong有些变量和方法跟Integer中类似,就不再赘述。二.Short类类图:Short类继承于Number抽象类和接口ComparableShort有些变量和方法跟Integer中类似,就不再赘述。三.Thread类类图:首先是一个定义函数式编程的Function...

2020-03-03 21:42:25 290

原创 JDK1.8源码阅读(3)--Byte/Double/Float /Integer

JDK1.8源码阅读(3)–前面两章写的过于冗长,接下来会省略些简单的又不是很重要的方法,重点突出那些有阅读意义的代码。一.Byte类类图:

2020-03-02 17:25:29 584

原创 JDK1.8源码阅读(2)--AbstractStringBuilder/StringBuffer/StringBuilder/Boolean

JDK1.8源码阅读(2)–一.AbstractStringBuilder抽象类,类图:继承了2个接口,一个是CharSequence,前面一章讲过,还有个是Appendable,下面讲讲这个:这是一个添加字符序列的接口,代表对象具有添加字符序列的能力Appendable append(CharSequence csq):向该对象添加一个字符序列Appendable append(C...

2020-03-01 21:25:15 208

原创 JDK1.8源码阅读(1)--Object类和String类

JDK8源码阅读(1)java.lang一.Object类java所有类的祖先。类图:依次分析下这几个方法:1.void registerNatives()先定义了registerNatives()方法,然后当该类被加载的时候,调用该方法完成对该类中本地方法的注册。2.Class<?> getClass()返回当前对象所属的类对象。3.int hashCode()...

2020-03-01 10:49:11 421

原创 Java并发编程艺术学习笔记(六)

Java并发编程艺术学习笔记(六)Java中的并发工具类CountDownLatch、CyclicBarrier、Semaphore工具提供了一种并发流程控制的手段,Exchanger工具类提供了在线程间交换数据的一种方式。一.等待多线程完成的CountDownLatchCountDownLatch允许一个或者多个线程等待其他线程完成操作。一般采用的方法都是采用join()方法,join...

2020-02-28 20:32:16 196

原创 Java并发编程艺术学习笔记(五)

Java并发编程艺术学习笔记(五)Java并发容器和框架Java为开发者也提供了许多开发容器和框架,可以从每节的原理分析来学习其中精妙的并发程序。一.ConcurrentHashMap的实现原理和使用Ⅰ.为什么要使用ConcurrentHashMap在并发编程的时候如果使用HashMap可能会导致程序死循环,但是线程安全的HashTable效率又十分低下。所以需要一个线程安全又高效的Co...

2020-02-27 17:09:11 216

原创 Java并发编程艺术学习笔记(四)

Java并发编程艺术学习笔记(四)Java中的锁主要介绍了Java并发包中关于锁相关的API和组件。一.Lock接口在Lock接口出现之前,Java程序是通过synchronized的关键词来实现锁功能的。在JDK5之后并发包中新加入了Lock接口(以及实现类)来实现锁的功能,提供了与synchronized类似的功能,但是可以显式地去获取和释放锁。synchronized关键词会隐式地...

2020-02-26 17:00:21 146

原创 Java并发编程艺术学习笔记(三)

Java并发编程艺术学习笔记(三)Java并发编程基础java天生就内置了对于多线程的支持,线程作为操作系统调度的最小单位,多线程同时运行可以显著提升程序性能。一.线程简介Ⅰ.什么是线程操作系统运行一个程序时候,会对这个程序创建一个进程。现代操作系统的最小单元是线程,也叫轻量级进程,在一个进程中可以创建多个线程。处理器在这些线程上高速切换,让使用者感觉到这些线程是在同时运行。Ⅱ.为什么...

2020-02-24 19:58:07 144

原创 Java并发编程艺术学习笔记(二)

Java并发编程艺术学习笔记(二)Java内存模型在《深入理解JVM》中已经学习了一些关于java内存模型的知识,在并发编程中关于java内存模型写的更详细,再做次总结有助于理解深刻。一.Java内存模型基础Ⅰ.并发编程模型的两个关键问题两个关键问题是线程之间如何通信以及线程之间如何同步。在共享内存的并发模型中,线程之间共享程序的公共状态,通过修改公共状态来隐式通信。在消息传递的并发...

2020-02-23 21:28:26 283

原创 Java并发编程艺术学习笔记(一)

Java并发编程艺术学习笔记(一)学习了JVM后,在最后引出了内存模型以及并发编程,所以希望接着通过学习《Java并发编程艺术》以及研究jdk8中的源码来搞清楚Java并发的奥秘。这个系列主要会总结下Java并发编程艺术这本书以及粘贴些源码来加深理解。一.并发编程的挑战并发编程的好处很多,但是同样的面临着挑战也很多,例如上下文切换、死锁以及软硬件限制等等。1.上下文切换单核处理器也可以实...

2020-02-22 15:45:01 240

原创 JVM学习--(九)线程安全和锁优化

JVM学习–(九)线程安全和锁优化一.概述从以前流行的面向过程编程到现在的面向对象编程,面向对象编程极大的提升了现代软件开发的效率和规模,但是不可避免的是对象之间的相互切换,为了让程序维护的更好更好,我们必须引入“高效并发”来保证并发的正确性、安全性和效率性。二.线程安全比较宽泛的定义(没有什么可以操作性):如果一个对象可以被多个线程同时使用,那么它就是线程安全的。比较严谨并且有操作性的...

2020-02-15 23:24:39 555

原创 JVM学习--(八)Java内存模型和线程

JVM学习–(八)Java内存模型和线程计算机往往需要并发处理多个线程,一个服务端要同时对多个客户端进行服务。一.硬件的效率与一致性让计算机并发的执行若干的任务和充分利用计算机CPU的性能是因果关系。由于内存的存取与处理器的速度不是一个量级的,所以不得不在这两者间加入一个高速缓存来提高运算速度。但是也带来了一个新的问题:缓存一致性。在多路处理器系统中,每个处理器都有自己的高速的缓存,但是共享...

2020-02-15 10:18:41 188

原创 JVM学习--(七)后端编译与优化

JVM学习–(七)后端编译与优化后端主要指的是将Class文件转化成与本地基础设施相关的二进制机器码的过程。与普通的解释器相比,提前编译器和即时编译器的加入优化了后端的过程,虽然两者都不是一个虚拟机所必备的,确实一个虚拟机好坏的重要衡量标准之一。即时编译器java虚拟机是通过解释执行的,当虚拟机发现某个方法或者代码块运行的特别频繁,就会把这些代码认定为“热点代码”,就会在运行时把这些代码转成...

2020-02-09 21:33:20 363

原创 JVM学习--(六)前端编译与优化

JVM学习–(六)前端编译与优化一般说的“编译期”是比较宽泛的概念,主要可以指三个方面:1️⃣前端编译器。指的是吧.java文件转化成 .class文件的过程。2️⃣即时编译器。指的是运行期把字节码转成机器码的过程。3️⃣提前编译器。直接把程序编译成与目标机器指令集相关的二进制代码。这里主要指的是前端编译器,由于在这里对于效率的优化措施基本上是没有的,优化主要针对的是程序员的编码效率和语...

2020-02-09 10:20:55 283

原创 JVM学习--(五)虚拟机字节码执行引擎

JVM学习–(五)虚拟机字节码执行引擎执行引擎是Java虚拟机核心的组成部分之一,所有虚拟机的概念模型都是相同的,但是在实现的过程中,不同的虚拟机不同,通常会有解释执行以及编译执行,也可以两者兼得。从外观上来看,所有虚拟机的执行引擎都是相同的,因为他们都是输入字节码的二进制流,输出的是执行结果。...

2020-02-08 11:22:13 141

原创 JVM学习--(四)虚拟机类加载机制

JVM学习–(四)虚拟机类加载机制当源码被编译成为class文件后,就需要加载到虚拟机之中被运用和使用,这个过程被称为虚拟机的类加载机制。类加载机制只要通过加载、连接(验证、准备、解析)、初始化、使用、卸载。类型的加载连接和初始化过程都是在程序运行的过程中完成的,给java带来了天生可以动态扩展的优势。加载 验证 准备 初始化以及卸载必须顺序开始,但解析阶段某些情况下可以在初始化后进行。...

2020-02-03 15:34:29 161

原创 JVM学习--(三)类文件结构

JVM学习–(三)类文件结构本节会主要通过《深入理解JAVA虚拟机》上的一个实例,通过自己重新编译分析,来呈现class文件的结构。一.源码文件package org.fenixsoft.clazz;public class TestClass { private int m; public int inc(){ return m+1; }}二...

2020-02-02 09:27:19 243

原创 JVM学习--(二)垃圾收集器与内存分配策略

垃圾收集器与内存分配策略垃圾回收主要完成了三件事情:确定哪些垃圾需要回收,什么时候进行回收以及如何把垃圾回收。此篇仅针对JAVA堆的垃圾回收。一.哪些垃圾需要回收(判断对象已死)1.是否存活算法:1️⃣引用计数算法:如果引用则加1,任何时候都没有引用则为0,这时候虚拟机就可以将它回收。致命缺点:容易存在循环引用,引起内存泄漏。2️⃣可达性分析算法:以GC ROOTS为起点进行遍历,如果对...

2020-01-31 15:36:24 408

原创 JVM学习--(一)Java内存区域与内存溢出异常

Java内存区域与内存溢出异常一.Java技术体系JDK:Java程序设计语言、JVM、Java类库三部分所构成 支持Java程序开发的最小的环境JRE:JVM以及Java类库API的Java SE API子集两部分所构成 支持程序运行的标准环境二.JVM内存区域分布1.程序计数器程序计数器本质上是标记下一条需要执行的字节码指令。特点:1.线程私有,每个线程都有自己的程...

2020-01-29 22:53:20 188

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除