随笔分类 -  Java

摘要:IO可以分为文件IO和Socket IO,本篇主要总结文件IO。 一、常用的流 下图就是Java中常见的文件IO流。 1.流的分类 ①输入流和输出流。 按照流向:可分为输入流和输出流。 这里输入输出涉及到方向问题,通常是以内存(程序运行在内存)的角度来考虑的。所以,从硬盘到内存是内存输入,从内存到硬 阅读全文
posted @ 2019-06-24 23:12 静水楼台/Java部落阁 阅读(325) 评论(0) 推荐(0) 编辑
摘要:原文:Understanding Memory Leaks in Java 内存泄漏是指不再使用的对象持续占有内存空间而得不到及时释放,从而造成内存空间的浪费称为内存泄漏。比如,长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄漏,尽管短生命周期对象已经不再需要,但是因为长生命周期持有它的引 阅读全文
posted @ 2019-05-19 14:48 静水楼台/Java部落阁 阅读(2037) 评论(0) 推荐(0) 编辑
摘要:先来看看参数是如何传递的。 参数的传递 1.基本类型的参数传递 public static void main(String[] args) { int a = 1; fun(a); } private static void fun(int x) { } 基本类型的参数传递,是直接将实参的值传递给 阅读全文
posted @ 2019-03-07 14:17 静水楼台/Java部落阁 阅读(198) 评论(0) 推荐(0) 编辑
摘要:一、快速报错机制(fail-fast) 这是《Java编程思想》中关于快速报错机制的描述 Java容器有一种保护机制,能够防止多个进程同时修改同一个容器的内容。如果在你迭代遍历容器的过程中,另一个进程介入其中,并且插入、删除或者修改此容器内的某个对象,那么就会出现问题:也许迭代过程中已经处理过容器中 阅读全文
posted @ 2019-01-23 18:50 静水楼台/Java部落阁 阅读(710) 评论(0) 推荐(0) 编辑
摘要:ArrayBlockingQueue是一个基于数组实现的有界的阻塞队列。 属性 //底层存储元素的数组。为final说明一旦初始化,容量不可变,所以是有界的。 final Object[] items; //下一个take, poll, peek or remove操作的index位置 int ta 阅读全文
posted @ 2019-01-19 15:38 静水楼台/Java部落阁 阅读(449) 评论(0) 推荐(0) 编辑
摘要:hashMap源码分析:hashMap源码分析 版本说明:jdk1.7LinkedHashMap继承于HashMap,是一个有序的Map接口的实现。有序指的是元素可以按照一定的顺序排列,比如元素的插入顺序,或元素被访问的顺序。 内部结构 说明:该图来源于其它博客,信手拈来,在此感谢! LinkedH 阅读全文
posted @ 2019-01-19 15:11 静水楼台/Java部落阁 阅读(184) 评论(0) 推荐(0) 编辑
摘要:说明:基于jdk1.7 一、基本信息 hashmap的原理图如下 先来看看HashMap中每个节点的定义。HashMap中的每个节点元素称为Entry,Entry类是HashMap的静态内部类。通过声明可以知道,它实际上就是一个链表结构,多个Entry节点串起来就形成了链表。每个节点包含了<K,V> 阅读全文
posted @ 2019-01-19 14:55 静水楼台/Java部落阁 阅读(235) 评论(0) 推荐(0) 编辑
摘要:HashSet底层是HashMap实现的,关于HashMap的分析请移步到HashMap源码分析 属性 HashSet底层是使用HashMap实现的,由于HashMap存储的是<Key,Value>键值对,而HashSet不需要Value,所以HashSet内部使用了一个虚拟的Object对象作为底 阅读全文
posted @ 2019-01-19 14:44 静水楼台/Java部落阁 阅读(156) 评论(0) 推荐(0) 编辑
摘要:版本说明:jdk1.7.0_79 概述 Hashtable已经成为过时的集合,但是仍有必要研究一下其源码,而且面试中也经常被问到Hashtable与HashMap的区别。Hashtable是线程安全的,但是Collections类中已经针对集合的线程安全有了新的实现,如果考虑到线程安全,请使用Col 阅读全文
posted @ 2019-01-09 14:12 静水楼台/Java部落阁 阅读(128) 评论(0) 推荐(0) 编辑
摘要:基于jdk1.7源码 一、无锁容器 CopyOnWriteArrayList是JDK5中添加的新的容器,除此之外,还有CopyOnWriteArraySet、ConcurrentHahshMap和ConcurrentLinkedQueue等,它们都是无锁容器。 所谓无锁,就是不需要使用对象内置锁(s 阅读全文
posted @ 2018-12-13 18:28 静水楼台/Java部落阁 阅读(180) 评论(0) 推荐(0) 编辑
摘要:说明:本文基于jdk1.7源码 LinkedList 是一个双向链表,它也可以被当作栈、队列(Queue)或双端队列(Deque)进行操作。LinkedList随机访问效率低,但随机插入和删除效率高。 LinkedList是基于链表实现的,链表中节点定义如下。 Node 每个节点由prev指针,ne 阅读全文
posted @ 2018-12-13 18:22 静水楼台/Java部落阁 阅读(186) 评论(0) 推荐(0) 编辑
摘要:Vector与ArrayList底层实现基本类似,底层都是用数组实现的,最大的不同是Vector是线程安全的。ArrayList源码分析请参考ArrayList源码分析 一、源码分析 基于jdk1.7源码 属性 Vector多了一个capacityIncrement属性。当Vector需要扩容时,增 阅读全文
posted @ 2018-12-13 18:16 静水楼台/Java部落阁 阅读(343) 评论(0) 推荐(0) 编辑
摘要:基于jdk1.7源码 一、源码分析 属性 ①DEFAULT_CAPACITY:默认初始容量为10。 ②EMPTY_ELEMENTDATA:表示空数组, Arraylist在刚创建时通常是一个空数组,不含任何元素,如果一次创建了 ③elementData:是用来缓存元素的数组,该属性被声明为trans 阅读全文
posted @ 2018-12-13 18:02 静水楼台/Java部落阁 阅读(166) 评论(0) 推荐(0) 编辑
摘要:下面是我画的线程池的原理图。 一、属性 public class ThreadPoolExecutor extends AbstractExecutorService { //控制标识,32位(拆分为高3位和低29位) private final AtomicInteger ctl = new At 阅读全文
posted @ 2018-12-07 16:52 静水楼台/Java部落阁 阅读(372) 评论(0) 推荐(0) 编辑
摘要:一、概述 ThreadLocal应用场景很广,很多主流框架都使用到它。例如,Spring用它来管理数据库连接,每个线程获取的都是自己的数据库连接对象。 通常,我们使用ThreadLocal有两个目的: 1.用来隔离不同线程的变量,避免线程间互相干扰。 比如,我们系统每秒钟同时会有很多用户请求,每个请 阅读全文
posted @ 2018-05-29 17:41 静水楼台/Java部落阁 阅读(169) 评论(0) 推荐(0) 编辑
摘要:一、锁升级(JMV层优化) JavaSE6为了减少获得锁和释放锁带来的性能消耗,引入了“偏向锁”和“轻量级锁”,所以JavaSe6中锁共有4种状态,级别从低到高依次是:无锁状态,偏向锁状态,轻量级锁状态,和重量级锁状态。锁的状态会随着锁竞争的激烈程度的升级而升级。锁可以升级,但不能降级,这种只能升级 阅读全文
posted @ 2018-05-29 17:23 静水楼台/Java部落阁 阅读(378) 评论(0) 推荐(0) 编辑
摘要:一、String 1、String概述 String代表字符串,Java中的所有字符串字面量都是它的实例,如"abc"。String对象是不可变的,一旦创建就不可以再被更改。String被设计为final的,是因为其设计者不希望String被继承而遭到更改。 在不同的JDK版本中,String类的实 阅读全文
posted @ 2018-05-22 16:38 静水楼台/Java部落阁 阅读(135) 评论(0) 推荐(0) 编辑
摘要:一、Integer类的缓存机制 我们查看Integer的源码,就会发现里面有个静态内部类。 public static Integer valueOf(int i) { assert IntegerCache.high >= 127; //当前值在缓存数组区间段,则直接返回该缓存值 if (i >= 阅读全文
posted @ 2018-05-16 11:28 静水楼台/Java部落阁 阅读(8203) 评论(0) 推荐(3) 编辑
摘要:尽管Object类是一个具体的类,但是设计它主要是为了扩展。它所有的非final方法,如equals、hashCode、toString、clone和finalize都有明确的通用约定,因为它们被设计为要覆盖(override)的。任何一个类,在覆盖这些方法时,都必须遵守各自的约定,否则,其它依赖于 阅读全文
posted @ 2018-05-15 17:44 静水楼台/Java部落阁 阅读(273) 评论(0) 推荐(0) 编辑
摘要:从应用程序的角度来看,线程安全问题的产生是由于多线程应用程序缺乏某种保障——线程同步机制。从广义上来说,Java平台提供的线程同步机制包括锁、volatile关键字、final关键字、static关键字以及一些相关的API,如Object.wait()/Object.nofity()等。 一、锁的概 阅读全文
posted @ 2018-05-14 15:07 静水楼台/Java部落阁 阅读(982) 评论(0) 推荐(0) 编辑