摘要: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 方法提供了很多有用的工具方法,其中有一部分也涉及到一些算法,经过这篇文章你是不是更了解了呢?
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并行迭代的性能比串行迭代和外部迭代都好。
而针对volatile修饰的变量给java虚拟机特殊的约定,线程对volatile 变量的修改会立刻被其他线程所感知,即不会出现数据脏读,从而保证数据的一个可见性。...volatile 特性分析 特性一:可见性 前面介绍Java内存模型的时候,我们说过可见性是指当一个线程修改了共享变量的值,其他线程立即感知到这种变化。...特性二、禁止重排序 前面介绍Java 内存模型的时候,我们说过java中的有序性可以概况为一句话:如果在本线程中观察,所有的操作都是有序的;如果在另外一个线程中观察,所有的操作都是无序的。
ThreadLocal 是保证线程安全的一个工具类 大概使用方式是 private ThreadLocal stopWatch = new ThreadLocal();//定义成员变量
分析 内部结构 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
今天我要分享的是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()进行信息格式友好的输出。
JAVA进阶:String源码分析 String结构 /*Strings are constant; their values can not be changed after they are created.Stringbuffers...Forexample:*/public final class String implements java.io.Serializable, Comparable, CharSequence...源码里可以看到String被final修饰并继承了三个接口 源码注释也说到字符串是不变的; 它们的值在创建后无法更改.Stringbuffers支持可变字符串。...StringBuilder StringBuilder和Stringbuffer这两个类的方法都很想一样,因此我们就那StringBuilder的源码作分析 等下再去看三者之间的关系和不同 结构和构造...} return false; } 基本数据类型比较值引用数据类型比较地址值 (对象的引用,在堆空间,String在字符串池,newString在堆空间) 根据下面案例分析一下源码
今天我们来分享一下与java相关的CopyOnWriteArrayList的技术点,可能有的人是第一次见到这个,也有可能早已了解,今天我们就来对其源码进行分析,来熟悉和了解一下什么是写时复制容器。...package com.wpw.asyncthreadpool; import java.util.concurrent.CopyOnWriteArrayList; public class CopyOnWriteArrayListTest...好了,这里的clear()方法的程序代码流程我们就分析完了。 集合常用的方法判空操作也是很常用的,接下来我们继续对集合提供的isEmpty()方法进行分析了。...我们看下下面的这个方法好了,lastIndexOf()方法,这个方法的程序代码我们还是继续分析下好了,其实在这里说下,这篇文章很长,因为我要对每一个方法都要进行分析一下,看下它提供了哪些,这样我们在使用集合的时候可以针对具体情况使用不同的方法去解决问题...() == Object[].class) setArray(cs); else { //若原有的集合操作不为空,先通过工具类拷贝一个数据出来
其实分析这篇文章的时候自己在想,java这门高级语言真的很好,它的特性也给了自己很多的思考,ArrayBlockingQueue源码分析完之后,我应该不在去分析java的源码了,已经写好的内容,自己会输出和分享出来...一般工作中我们都是面向业务进行编写代码的,是的,调用javaAPI进行数据操作,所以分析源码算是自己的一个喜好吧,不然我也不会大半夜不睡觉在分析自己喜欢的java语言吧,在18年下半年的时候自己就早已去分析过一部分数据结构了...这也是最初自己为什么在公众号里面用简单的文字去描述一个技术点,有的人乐于分析spring源码,其它框架的源码,但是我自己不去分析这样的框架,至少目前是,因为我水平达不到,以及我工作中也用不到去分析这样的源码...这次要分析的ArrayBlockingQueue源码或许是我对之前写的线程池的理解有所帮助一点,主要是为了回顾一下队列的使用,之前好像在分析队列的源码时自己好像说过队列在工作中没有用到过,好像线程池里面用到了队列...java8的用法,这个真的很好用,自己也分享了两篇关于java8的操作,这可是工作中常用的操作哈。
本文将从源码角度分析Java对象是如何被创建的。...OpenJDK版本 ➜ hg id 76072a077ee1+ jdk-11+28 首先来看段Java代码 public class Hello { private Hello() {}...static Hello create() { return new Hello(); } } 其对应的字节码为 ➜ javac Hello.java ➜ javap -c Hello...因为本文分析的是Java对象的创建过程,所以这里我们只看字节码new,其他字节码不再赘述。...该类中的_metadata字段是用来标识这个对象所属的类,Java对象就是通过它来获取各种和类有关的信息的。
这是关于java集合类源码分析文章的最后一篇,后面或许会随着自己的一些理解,自己还是会再来写一两篇集合源码分析的文章,因为目前自己的理解,有些集合的源码自己确实理解不了,所以我就不继续分析其它集合源码了...,这是源码分析的第14篇,java中常用的集合基本上分析完了,除了HashMap之类的没有分析,都分析完了。...关于HashMap的源码分析,自己在之前的文章中说过自己不会去分析它,因为我觉得你理解了散列函数就差不多了。...一,LinkedBlockingDeque的类结构,理解这个结构才能"登高望远" 这个图可以看出来java作为一门高级语言的"单继承","多实现"的特点,理解这点就可以了。...自己想分析的方法都分析完了,其它的pop()方法就分析了,因为每个方法都在上面分析了,这里暂时不在这里做一下分析源码分析总结的文章了,说不定哪天自己理解好了就会单独写一篇自己对源码分析总结的文章分享出来
领取专属 10元无门槛券
手把手带您无忧上云