HashMap

Java7 HashMap 大方向上,HashMap 里面是一个数组,然后数组中每个元素是一个单向链表。 上图中,每个绿色的实体是嵌套类 Entry 的实例,Entry 包含四个属性:key, value, hash 值和用于单向链表的 next。 capacity:当前数组容量,始终保持 2^...

2019-02-15 14:47:08

阅读数 27

评论数 0

二叉树

在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。 二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第...

2019-02-13 10:31:03

阅读数 17

评论数 0

AbstractMap

AbstractMap是一个抽象类,它是Map接口的一个骨架实现,最小化实现了此接口提供的抽象函数。在Java的Collection框架中基本都遵循了这一规定,骨架实现在接口与实现类之间构建了一层抽象,其目的是为了复用一些比较通用的函数以及方便扩展,例如List接口拥有骨架实现AbstractLi...

2018-11-14 09:12:05

阅读数 46

评论数 0

Map

Map是一种用于快速查找的数据结构,它以键值对的形式存储数据,每一个键都是唯一的,且对应着一个值,如果想要查找Map中的数据,只需要传入一个键,Map会对键进行匹配并返回键所对应的值,可以说Map其实就是一个存放键值对的集合。Map被各种编程语言广泛使用,只不过在名称上可能会有些混淆,像Pytho...

2018-11-11 16:20:42

阅读数 49

评论数 0

JVM (四)性能调优

1、JVM 调优目标:使用较小的内存占用来获得较高的吞吐量或者较低的延迟 程序在上线前的测试或运行中有时会出现一些大大小小的 JVM 问题,比如 cpu load 过高、请求延迟、tps 降低等,甚至出现内存泄漏(每次垃圾收集使用的时间越来越长,垃圾收集频率越来越高,每次垃圾收集清理掉的垃圾数据越...

2018-11-04 14:42:39

阅读数 33

评论数 0

JVM(三)类加载

编写的 Java 代码需要经过编译器编译为 class 文件(从本地机器码转变为字节码的过程),class 文件是一组以 8 位字节为基础的二进制流,这些二进制流分别以一定形式表示着魔数(用于标识是否是一个能被虚拟机接收的 Class 文件)、版本号、字段表、访问标识等内容。代码编译为 class...

2018-10-09 21:27:43

阅读数 22

评论数 0

JVM(二)垃圾回收

JVM 垃圾回收 垃圾回收,就是通过垃圾收集器把内存中没用的对象清理掉。垃圾回收涉及到的内容有: 1、判断对象是否已死; 2、选择垃圾收集算法; 3、选择垃圾收集的时间; 4、选择适当的垃圾收集器清理垃圾(已死的对象)。 1、判断对象是否已死 判断对象是否已死就是找出哪些对象是已经死...

2018-10-09 13:34:48

阅读数 32

评论数 0

JVM(一)内存区域、内存溢出

一、JVM 内存区域 Java虚拟机在运行时,会把内存空间分为若干个区域,根据《Java虚拟机规范(Java SE 7 版)》的规定,Java虚拟机所管理的内存区域分为如下部分:方法区、堆内存、虚拟机栈、本地方法栈、程序计数器。 1、方法区 方法区主要用于存储虚拟机加载的类信息、常量、静态变量,...

2018-09-25 21:59:59

阅读数 796

评论数 2

并发编程(五)AQS内部实现

同步锁 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源,在Lock接口出现之前,Java应用程序只能依靠synchronized关键字来实现同步锁的功能,在java5以后,增加了JUC的并发包且提供了Lock接口用来实现锁的功能,它提供了与synch...

2018-09-19 13:52:40

阅读数 242

评论数 0

并发编程(四)synchronized

synchronized 关键字 synchronized关键字是Java 1.0就有的语法元素。在Java中,所有的object实例(class也是一种object)都可以作为多线程环境下得竞争资源,所以每个oject上都有一个锁的标记,在执行关键代码的时候,对非null的object加上...

2018-09-12 21:28:47

阅读数 44

评论数 0

并发编程(三)volatile与内存屏障

Java通过几种原子操作完成工作内存和主内存的交互: lock:作用于主内存,把变量标识为线程独占状态。 unlock:作用于主内存,解除独占状态。 read:作用主内存,把一个变量的值从主内存传输到线程的工作内存。 load:作用于工作内存,把read操作传过来的变量值放入工作...

2018-09-10 20:52:47

阅读数 197

评论数 0

并发编程(二)缓存一致性与JMM

CPU高速缓存 线程是CPU调度的最小单元,线程涉及的目的最终仍然是更充分的利用计算机处理的效能,但是绝大部分的运算任务不能只依靠处理器“计算”就能完成,处 理器还需要与内存交互,比如读取运算数据、存储运算结果,这个I/O操作是很难消除的。 而由于计算机的存储设备与处理器的运算速度差...

2018-08-28 14:55:22

阅读数 125

评论数 0

适配器模式、装饰模式、代理模式

适配器模式 基本介绍 将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。——Gang of Four 适配器模式将一个类的接口适配成用户所期待的。一个适配器通常允许因为接口不兼容而不能一起工作的类能够在一起工作,做法是...

2018-08-20 11:33:12

阅读数 77

评论数 0

并发编程(一)多线程基础

多线程使用场景 1、通过并行计算提高程序执行性能 2、需要等待网络、I/O 响应导致耗费大量的执行时间,可以采用异步线程的方 式来减少阻塞 创建多线程 在 Java 中,有多种方式来实现多线程。继承 Thread 类、实现 Runnable 接 口、使用 ...

2018-08-16 19:49:33

阅读数 79

评论数 0

单例模式

介绍: 单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。 许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单...

2018-08-13 08:58:04

阅读数 35

评论数 0

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