摘要:enkatt Guhesan 分享了一些Java工具,帮助你优化代码以及检查源代码中的潜在问题。 1....死代码——未使用的局部变量、参数、私有方 ... enkatt Guhesan 分享了一些Java工具,帮助你优化代码以及检查源代码中的潜在问题。...4.Mackerfromhttp://innig.net/macker/ Macker是一个适用于Java开发人员用来检查架构规则的工具。...7.Hammurapifromhttp://www.hammurapi.com Hammurapi是一款执行Java程序代码的自动检测工具。...8.Relieffromhttp://www.workingfrog.org/ Relif是一款设计工具,为Java项目提供了崭新的面貌。
文章出处 文章出自:安卓进阶学习指南 作者:shixinzhang 完稿日期:2017.10.25 Collections 和 Arrays 是 JDK 为我们提供的常用工具类,方便我们操作集合和数组...由于两个都是工具类,我们就放在一起学习。...我们选几个看一下源码。...4.空集合 目前我还没想出什么时候需要创建一个空集合,看 Collections.emptyList() 的源码,创建的空列表除了内容为 0,还不支持添加操作,也就是永远就是个空的。 何必呢?...总结 可以看到 Collections 方法提供了很多有用的工具方法,其中有一部分也涉及到一些算法,经过这篇文章你是不是更了解了呢?
分析 内部结构 LinkedHashMap继承自HashMap,内部额外维护了一个Entry的双向链表,用于记录访问和插入顺序。
Java String 源码分析 定义 Java 8 中 String 源码 public final class String implements java.io.Serializable...String 是final 类型不能被继承,同时实现了 java.io.serializable Comparable charSequence 三个接口。...static final long serialVersionUID = -6849794470754667710L; String 实现了 Serializable 接口,支持序列化和反序列化支持,Java...使用字节数组来构建 String Java 中,String 实例中报错一个字符数组,char[] 字符数组时以 unicode 码来存储的。...Java 8 中采用的是 Array.copy 方法,避免了这个问题 public String(char value[], int offset, int count) { if (offset
1、源码分析 废话不多说,直接上代码,相关解释请参见注释 package java.util; /** * * @param the type of elements maintained...HashMap * @since 1.2 */ public class HashSet extends AbstractSet implements Set, Cloneable, java.io.Serializable...s) throws java.io.IOException { // Write out any hidden serialization magic...s) throws java.io.IOException, ClassNotFoundException { // Read in any hidden serialization...通过源码可知,HashSet实际上由HashMap支持实现。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。
前言 Java 8 的 Stream 使得代码更加简洁易懂,本篇文章深入分析 Java Stream 的工作原理,并探讨 Steam 的性能问题。...image 源码结构 Stream 相关类和接口的继承关系如下图所示: ?...image 操作叠加 Stream 的基础用法就不再叙述了,这里从一段代码开始,分析 Stream 的工作原理。...分析如下: 对于基本类型Stream串行迭代的性能开销明显高于外部迭代开销(两倍); Stream并行迭代的性能比串行迭代和外部迭代都好。...image 分析,对于复杂的归约操作: Stream API的性能普遍好于外部手动迭代,并行Stream效果更佳; 再来考察并行度对并行效果的影响,测试结果如下: ?
前言 Java 8 的 Stream 使得代码更加简洁易懂,本篇文章深入分析 Java Stream 的工作原理,并探讨 Steam 的性能问题。...操作分类详情如下图所示: [2020-12-03-030958.jpg] 源码结构 Stream 相关类和接口的继承关系如下图所示: [2020-12-03-031525.jpg] BaseStream...[2020-12-03-033401.png] 操作叠加 Stream 的基础用法就不再叙述了,这里从一段代码开始,分析 Stream 的工作原理。...java.util.stream.StreamSupport#stream(java.util.Spliterator, boolean) public static Stream...分析如下: 对于基本类型Stream串行迭代的性能开销明显高于外部迭代开销(两倍); Stream并行迭代的性能比串行迭代和外部迭代都好。
ThreadLocal 是保证线程安全的一个工具类 大概使用方式是 private ThreadLocal stopWatch = new ThreadLocal();//定义成员变量
而针对volatile修饰的变量给java虚拟机特殊的约定,线程对volatile 变量的修改会立刻被其他线程所感知,即不会出现数据脏读,从而保证数据的一个可见性。...volatile 特性分析 特性一:可见性 前面介绍Java内存模型的时候,我们说过可见性是指当一个线程修改了共享变量的值,其他线程立即感知到这种变化。...特性二、禁止重排序 前面介绍Java 内存模型的时候,我们说过java中的有序性可以概况为一句话:如果在本线程中观察,所有的操作都是有序的;如果在另外一个线程中观察,所有的操作都是无序的。
今天我要分享的是java里面比较常见的数据结构队列的源码分析,队列,先进先出模式,即FIFO的特点,日常生活中队列的特点也随处可见,超市购物排队,餐厅排队买饭等一系列都满足了队列的先进先出的特点,java...也不是,主要是之前我自己分析了ArrayList,LinkedList以及Stack的源码文章了,到这里就理所应当的应该分析队列的这种数据结构了,满足一下学生时代心心念的数据结构吧。...说了这么多,接下来就逐渐去分析队列的源码吧,写到这时下起了小雨,对,这个时间段是晚上十点左右,这篇文章是自己继五一放假来的第一篇文章,自己玩着玩着手机就突然想起了要写这篇文章了,索性就过来写了,要是学生时代这么努力多好...关于读源码,如何进行梳理整个过程,每个人都有着自己的一套,在这里我就以自己的一套来进行分析好了。...十,到这里就结束了自己对队列的源码分析,其实你会发现我这里没有对队列的每一个方法进行分析,其实都差不多,这里起到一个开头作用就可以了,下面的每个分析方法都差不多。
不过我并没有用这种方法,一来我看了一下,感觉生成的代码图不够直观,有些函数会被折叠;二来目前我并不打算使用 VS来编译 RTKLIB源码,我现在一直是用 NotePad++来编辑、阅读源码的。 ...图 5 我也是今天才发现这个神奇的东西,所关于源码分析工具也就先说到这里。...前段时间在打算开始阅读 RTKLIB源码时就在想,阅读开源代码有没有什么“黑科技”,当时出于懒惰没有去查找相关的资料,现在吃了苦头才发现,只能说“技术上可以偷懒,想法上不能偷懒”。
上篇我们分享了CopyOnWriteArrayList的源码分析,这次我们打算来分享 CopyOnWriteArraySet的源码分析,当自己整理了一下源码流程时发现这篇文章没什么写头,底层是在基于利用...package com.wpw.asyncthreadpool; import java.util.concurrent.CopyOnWriteArraySet; public class CopyOnWriteArraySetTest...我们看下在CopyOnWriteArrayList源码里面我们没有介绍到的containsAll()方法,由于这篇讲的是set,但是底层还是使用的是CopyOnWriteArrayList,所以我们这里继续分析...destPos, int length); 我们看上面的方法修饰符是由native关键字修饰的,所以它是在本地方法栈执行的,不是在java...到这里我们的分享内容就结束了,今天写了CopyOnWriteArrayList的姊妹篇 CopyOnWriteArraySet的源码分析,其实底层实现是基于CopyOnWriteArrayList的,喜欢文章的可以关注公众号
0x01,闲聊一下 本来今天(2020/06/xx)是打算分析一下ArrayBlockingQueue队列的源码的,但是看了半个多小时吧,还有一点没有想明白,索性就没有继续以文章的方式输出了,但是看了ArrayBlockingQueue...的源码,倒是觉得它就是一个线程安全的队列,所以后面打算分享一下吧,谁让当时理解不了那个知识点呢,后面再说了,后面自己就写了java的等待通知机制的文章和限流的文章,所以这是今天写的第三篇文章了,好了,好了...,不闲扯了,这里我就来分析了优先级队列的源码,因为我理解了里面的内容,不写出来总觉得没有掌握这个内容,其实也不是,可能是写文章写多了,不写总觉得不习惯,是的,不习惯。...0x02,步入主题 一般,我在分析源码的时候总是从构造函数入手,想起构造函数还是想起了要写一篇如何创建java对象的文章吗,不知道,还是在自己的内心沉淀一段时间再说吧,毕竟写文章是需要很花费一个人很长的时间的...,这是第15篇源码分析的文章,最近也在思考一下这两年的点点滴滴,如果自己有时间以及自己如果思考的有意义的话语,自己会单独写一篇这两年的点点滴滴分享一下,或许对于自己也是一个总结。
System.out.println("统计计算0~1000000000相加的总和" + sum + "耗时时间为:" + (endTime - startTime) + "ms"); } 我们先分析这段代码涉及的内容吧...想了解本地方法栈和java方法栈的内容可以先看下这两篇文章java虚拟机,应该了解一点点,另外一篇是java内存区域划分详解,后面的一篇是对前面内容的详细描述吧,希望可以帮助到你,喜欢的可以关注此公众号...我们继续说下另外一种计时方法吧,StopWatch,这是spring框架提供的一个工具类,只要你使用了spring框架,就无需导入其它jar包了,好了,我们看下它的常见用法吧,继续按照我们一贯的风格,先将代码看下...下面我们继续看下StopWatch工具类提供的常用方法吧 我们看下stopWatch方法做了什么,和原来的有什么不一样的,除了多了给当前的执行 任务起了一个有明确含义的任务名,在计算时间时任然时调用的是...下面再分析一下这个方法了,在我们的示例中,我们使用了下面的这个方法prettyPrint()进行信息格式友好的输出。
return this.name.equals(((A) obj).getName()); } } 输出结果如下: hello world 具体为什么会有上述结果呢,让我们来看下DistinctOps源码...} } }; } } }; } 上面标浅蓝色部分就是原因,即java
key计算hash值得到插入的数组索引i,如果tab[i]==null,直接新建节点添加,否则转入33,判断当前数组中处理hash冲突的方式为链表还是红黑树(check第一个节点类型即可),分别处理红黑树源码... resize()扩容 14 int threshold; 15 16 //记录 hashMap 装载因子 17 final float loadFactor; HasMap的扩容机制resize()源码...} } } } } return newTab; } 在java...jdk8中对HashMap的源码进行了优化,在jdk7中,HashMap处理“碰撞”的时候,都是采用链表来存储,当碰撞的结点很多时,查询时间是O(n)。
这是关于java集合类源码分析文章的最后一篇,后面或许会随着自己的一些理解,自己还是会再来写一两篇集合源码分析的文章,因为目前自己的理解,有些集合的源码自己确实理解不了,所以我就不继续分析其它集合源码了...,这是源码分析的第14篇,java中常用的集合基本上分析完了,除了HashMap之类的没有分析,都分析完了。...关于HashMap的源码分析,自己在之前的文章中说过自己不会去分析它,因为我觉得你理解了散列函数就差不多了。...一,LinkedBlockingDeque的类结构,理解这个结构才能"登高望远" 这个图可以看出来java作为一门高级语言的"单继承","多实现"的特点,理解这点就可以了。...自己想分析的方法都分析完了,其它的pop()方法就分析了,因为每个方法都在上面分析了,这里暂时不在这里做一下分析源码分析总结的文章了,说不定哪天自己理解好了就会单独写一篇自己对源码分析总结的文章分享出来
这次自己去分析了TreeSet的源码,这里就开始文章的下文吧,首先我还是按照构造函数的分析开始了。...TreeMap的源码,但是这不影响我的分析,因为我已经分析完TreeSet集合的源码,整个的过程中没有阻塞性,所以分析TreeSet集合继续了。...首先,TreeSet集合和其它普通的集合一样,主要是用来作为数据的容器装载,集合嘛可以理解为动态扩容的数组,因为数组的内存空间是静态分配的,记得理解动态和静态分配的这个内容是在18年初,那个时候可谓是对java...这门语言没有一个很高的把握,但是工作中的内容还是可以的,那个时候自己都写了java8的写法,但是时过两年后自己才去输出和分享了java8的文章,所以觉得自己想写的文章是不是拖延了很久,读过我的文章读者的就知道...final Object PRESENT = new Object(); 是的,它就是一个常量值,这样就会直接调用TreeMap的put()方法不用传动态的value值了,其实你看过HashSet的源码就会知道
Java集合类源码分析 〇、说明 一、Object类 1. 继承结构 2. 构造方法 3. 常用方法和参数 5. native关键字 二、ArrayList类 0. 数据结构 1. 继承结构 2....如何看源码 (1)看继承结构 看这个类的层次结构,处于一个什么位置,可以在自己心里有个大概的了解。 (2)看构造方法 在构造方法中,看做了哪些事情,跟踪方法中里面的方法。...构造方法 @HotSpotIntrinsicCandidate,java 9 中引入的HotSpot高校实现代码方式。...9之后就被标记为过时的方法,Oracle建议用java.lang.ref.Cleaner来替代。...5. native关键字 通过JNI(Java Native Interface)接口调用其他语言来实现对底层的访问。
领取专属 10元无门槛券
手把手带您无忧上云