Arrays.java是Java中用来操作数组的类。使用这个工具类可以减少平常很多的工作量。了解其实现,可以避免一些错误的用法。...算法的逻辑可以参考国外一篇博客 如果想要阅读源码可以参考我的另一篇博客双轴快速排序源码阅读笔记 它是不稳定的 另一种是为Object对象设计的,它要求传进来的数组对象必须实现Comparable接口。...super T> c); 他的实现方式如下: // java/utils/Arrays.java static final class LegacyMergeSort { private static...TimSort算法也是一种插入排序与归并排序结合的算法,不过它的细节优化要比Arrays.java中的算法做的多。详细介绍可以参考维基百科或者我的TimSort 源码笔记。...从注释上来看,在未来某个版本,Arrays.java中的merge方法将会被删除掉。 这个排序方法是稳定的。 查找 Arrays.java中只提供了二分查找。
Arrays.java是Java中用来操作数组的类。使用这个工具类可以减少平常很多的工作量。了解其实现,可以避免一些错误的用法。...算法的逻辑可以参考国外一篇博客 如果想要阅读源码可以参考我的另一篇博客双轴快速排序源码阅读笔记 它是不稳定的 另一种是为Object对象设计的,它要求传进来的数组对象必须实现Comparable接口。...super T> c); 他的实现方式如下: // java/utils/Arrays.java static final class LegacyMergeSort { private...TimSort算法也是一种插入排序与归并排序结合的算法,不过它的细节优化要比Arrays.java中的算法做的多。详细介绍可以参考维基百科或者我的TimSort 源码笔记。...从注释上来看,在未来某个版本,Arrays.java中的merge方法将会被删除掉。 这个排序方法是 稳定 的。 查找 Arrays.java中只提供了二分查找。
代码@2 bind()调用本地PlainSocketImpl.c#Java_java_net_PlainSocketImpl_socketBind()....代码@3 configureBlocking()调用本地函数IOUtil.c#Java_sun_nio_ch_IOUtil_configureBlocking(). int flags = fcntl(...小结:Java NIO的非阻塞通过本地函数fcntl中F_SETFL来设置。...代码@4 accept()调用本地函数ServerSocketChannelImpl.c#Java_sun_nio_ch_ServerSocketChannelImpl_accept0。...五、参考书籍 《Java NIO》、《UNIX网络编程 卷1》
对于它的了解,仅仅限于API的了解是不够的,必须对它的源码进行一定的学习。...Heap:堆是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,Java中的。 Stack:栈,又叫堆栈或者虚拟机栈。JVM为每个新创建的线程都分配一个栈。...二、String类源码解析 1、String类继承关系 public final class String implements java.io.Serializable, Comparable...我们通过阅读源码知道,字符串是由字符组成,字符存在value数组中。.../spring_cloud_demo/java_demo/src/main/java/string/StringDemo01.class Last modified 2020-6-6; size 730
本来准备看Java容器源码的。但是看到一开始发现Arrays这个类我不是很熟,就顺便把Arrays这个类给看了。Arrays类没有什么架构与难点,但Arrays涉及到的两个排序算法似乎很有意思。...除了上面提到的Galloping Mode,还有源码中还有一个概念叫作 run, 可以把它理解为一段已经排好序的数列。...java的源码在java安装路径下的src.zip文件内,不需要要去网上下载 例如:我的ubuntu 系统在 /usr/lib/jvm/java-7-oracle/src.zip内 import...java.util.Arrays; import java.util.Comparator; /** * Created by yxf on 16-5-30...* 这里对TimSort算法在java中的实现做了注释,部分实现逻辑相似的注释没有处理,直接是原来的注释。
newBuffer.get()); @1 newBuffer拥有了与buffer相同的mark、position、limit @2 buffer执行clear后不会对newBuffer造成影响 Duplicate源码...2.非直接缓冲区 非直接缓冲区源码 ByteBuffer byteBuffer = ByteBuffer.allocate(10); // @1 public static ByteBuffer...例如:asCharBuffer()、asLongBuffer()等通过工厂类创建视图缓冲区见上文复制/分割缓冲区源码部分,下面以asCharBuffer()分析下如何转换的。...源码分析 public CharBuffer asCharBuffer() { int size = this.remaining() >> 1; int off = offset +...三、总结 本文从源码角度跟踪分析了复制缓冲区、只读缓冲区、分割缓冲区、字节顺序、非直接缓冲区、直接缓冲区、视图缓冲区的实现原理。 四、参考资料 《Java NIO》第二章(完)
INIT_CAP]; } long pipeFds = IOUtil.makePipe(false); staticnativelongmakePipe(boolean blocking); //IOUtil.c#Java_sun_nio_ch_IOUtil_makePipe...() pipe(fd) 1.Pipe函数 IOUtil.makePipe本地方法调用IOUtil.c#Java_sun_nio_ch_IOUtil_makePipe()->pipe(fd)....五、本文总结 多路复用主要依靠Native函数Pipe函数和Poll函数(本文Poll函数为例);在Java实现中主要过程为:通过SelectionKeyImpl建立选择器与通道的关系;通过PollArrayWrapper...六、系列文章 系统层面I/O【原理笔记】 系统五种I/O模型【原理笔记】 Java NIO缓存区基本操作【源码笔记】 Java NIO字节缓存区【源码笔记】 Java NIO通道概览与文件通道【...源码笔记】 Java NIO文件锁和可中断通道【源码笔记】 Java NIO 散布读与聚集写【源码笔记】 Java NIO套接字【源码笔记】
本文介绍下Java Jar常见的反编译工具,并给出使用感受。 反编译JAR能干什么: 排查问题、分析商业软件代码逻辑,学习优秀的源码思路。...JD-GUI 下载地址:http://java-decompiler.github.io/ 点评:支持的java版本不会太高,中文注释能够正常显示。 ?...Luyten 下载地址:https://github.com/deathmarine/Luyten 点评: 支持Java版本更多,但是中文显示不正常,底层使用的是Procyon。 ?...综合点评 jd-gui.exe功能多但是支持java版本不太高,Luyten支持版本更多,但是中文显示不好。Bytecode Viewer也不错。Jadx强项在APK逆向方面,更吃资源。...终极大招 实际上面的反编译的工具失败了,我们还可以利用Idea自带的反编译工具。
概念关系: 0 <= mark <= position <= limit <= capacity 二、缓存区 1.Buffer类图 备注:从Buffer类图中体现的一系列操作方法,下文中将对其重要的方法源码逐一分析...@2 position需要小于等于limit;返回position后自增向后移位 @3 offset默认为0,可以在构造缓存区时对其赋值;每次填充时position需要加上offset 1.3 读取源码...position=8; limit=10; capacity=10 2.1.2 Flip后内存截图 备注:Flip后position=0; limit=8; capacity=10 2.1.3 Flip源码...4.4 压缩源码 public CharBuffer compact() { System.arraycopy(hb, ix(position()), hb, ix(0), remaining()...++) this.put(src[i]); // @2 return this; } @1 批量写入的长度不能大于剩余元素 @2 将数组元素写入到buffer 四、参考资料 《Java
Java 1、VM信息 jcmd可用来查找运行的应用所在JVM的基本信息,包括所有调优标识的值。 ...VM.system_version JVM版本 jcmd 56062 VM.command_line JVM命令行 jcmd 56062 VM.flags [-all] JVM调优标识 java...56062 获取单个标志的值 2、线程信息 jstack 56062 或 jcmd 56062 Thread.print 3、类信息和实时GC jstat 4、堆转储 jmap 性能分析工具
四、散布读JDK源码 由以上Native源码分析看出,矢量IO数据结构iovec是散布读和聚集写的核心部分,JDK源码实现也会围绕iovec结构体的封装展开。 1.流程图 ?...数组长度 long bytesRead = nd.readv(fd, vec.address, iov_len); //... } finally{ //... } } 代码位置:IOVecWrapper.java...IOV_MAX代码位置:jdk/src/solaris/native/sun/nio/ch JNIEXPORT jint JNICALL Java_sun_nio_ch_IOUtil_iovMax(JNIEnv...2.JDK源码的实现围绕iovec结构体以及iovec结构体数组的封装展开。 3.Scatter/Gather一个极其强大的工具,减少了数据来回移动,操作系统已经对此做了高度优化。...《Java NIO》 2.readv()函数说明 https://pubs.opengroup.org/onlinepubs/009695399/functions/readv.html 3.writev
fileChannel = randomAccessFile.getChannel(); 2.RandomAccessFile创建源码 代码位置:java.io.RandomAccessFile...3.文件打开源码 调用链条 1.open(name,imode); 2.open0(Stringname,intmode) 3.Java_java_io_RandomAccessFile_open0...八、通道关闭源码 给予fileChannel.close()进行追踪 1.JDK源码追踪 代码位置:java.nio.channels.spi.AbstractInterruptibleChannel...十、参考资料 参考书籍:《Java NIO》第三章 文章总结:本文梳理了通道接口继承关系,以文件通道FileChannel的示例入手,跟踪每个操作的Native方法,以及给出这些Native方法的调用源码和说明...十一、系列文章 系统层面I/O【原理笔记】 Java NIO缓存区基本操作【源码笔记】 Java NIO字节缓存区【源码笔记】 ---- 「瓜农老梁 学习同行」
摘要: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 方法提供了很多有用的工具方法,其中有一部分也涉及到一些算法,经过这篇文章你是不是更了解了呢?
阻塞队列 闭锁 栅栏 FutuerTask 信号量 同步工具类可以根据自身的状态来协调线程的控制流。...同步工具类都包含特定的结构化属性,封装了一些状态,这些状态觉得指定同步工具类的线程是继续执行还是等待。同时,提供了操作状态的方法。...闭锁 闭锁是一种同步工具类,可以延迟线程进度直到其到达终止状态。闭锁的作用相当于一扇门,闭锁到达结束状态之前,这扇门一直是关闭的,并且没有任何线程能通过,当结束时,这扇门会打开,并且允许所有线程通过。
LinkedList 源码笔记 个人理解 LinkedList由双向链表实现,每个链表内装着指向下一链表节点的地址值,因此想要查找LinkedList中某一个节点的元素值,就需要从头开始判断元素值,不是则找下一地址...当你需要使用栈或者队列时,可以考虑使用LinkedList,一方面是因为Java官方已经声明不建议使用Stack类,更遗憾的是,Java里根本没有一个叫做Queue的类(它是个接口名字)。...index) { checkElementIndex(index);//index >= 0 && index < size; return node(index).item; } 参考:Java...LinkedList源码剖析
ArrayList源码笔记 继承与接口实现 public class ArrayList extends AbstractList implements List, RandomAccess..., Cloneable, java.io.Serializable 构造方法 由无参构造可知,默认会创建大小为 10 的集合 public ArrayList(int initialCapacity)...EMPTY_ELEMENTDATA : Arrays.copyOf(elementData, size); } } 参考:Java ArrayList...源码剖析
一、从一个例子开始 通过以下示例对源码进行跟踪。...三、源码解读 1.图中第@5:标记I/O开始操作begin()源码 protected final void begin() { if (interruptor == null) { // 实现...四、Native lock0源码 Java_sun_nio_ch_FileDispatcherImpl_lock0(JNIEnv *env, jobject this, jobject fdo,...flock64 fl; // l_start从文件头开始计算偏移值 fl.l_whence = SEEK_SET; // 设置被加锁的长度 if (size == (jlong)java_lang_Long_MAX_VALUE...六、参考资料 《Java NIO》
导入类 java.util.regex.Pattern; //模式类:字符串要被匹配的模式 java.util.regex.Matcher;//匹配类:匹配某个字符串所产生的结果,一个字符串中可能有多处匹配
工具类源码 1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor...; 20 import java.util.Collection; 21 import java.util.Iterator; 22 import java.util.List; 23...28 * Operations on {@link java.lang.String} that are 29 * null safe....becomes String.lang.java (if the delimiter 5781 * is '.'...becomes String.lang.java (if the delimiter 5811 * is "."
领取专属 10元无门槛券
手把手带您无忧上云