自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

转载 HashMap

Java7 HashMap大方向上,HashMap 里面是一个数组,然后数组中每个元素是一个单向链表。上图中,每个绿色的实体是嵌套类 Entry 的实例,Entry 包含四个属性:key, value, hash 值和用于单向链表的 next。capacity:当前数组容量,始终保持 2^n,可以扩容,扩容后数组大小为当前的 2 倍。loadFactor:负载因子,默认为 0.75。t...

2019-02-15 14:47:08 192

转载 二叉树

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

2019-02-13 10:31:03 489

转载 AbstractMap

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

2018-11-14 09:12:05 177

转载 Map

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

2018-11-11 16:20:42 157

转载 JVM (四)性能调优

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

2018-11-04 14:42:39 182

转载 JVM(三)类加载

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

2018-10-09 21:27:43 164

转载 JVM(二)垃圾回收

JVM 垃圾回收垃圾回收,就是通过垃圾收集器把内存中没用的对象清理掉。垃圾回收涉及到的内容有:1、判断对象是否已死;2、选择垃圾收集算法;3、选择垃圾收集的时间;4、选择适当的垃圾收集器清理垃圾(已死的对象)。1、判断对象是否已死判断对象是否已死就是找出哪些对象是已经死掉的,以后不会再用到的,就像地上有废纸、饮料瓶和百元大钞,扫地前要先判断出地上废纸和饮料瓶是垃圾,百元大钞不是垃圾。...

2018-10-09 13:34:48 117

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

一、JVM 内存区域Java虚拟机在运行时,会把内存空间分为若干个区域,根据《Java虚拟机规范(Java SE 7 版)》的规定,Java虚拟机所管理的内存区域分为如下部分:方法区、堆内存、虚拟机栈、本地方法栈、程序计数器。1、方法区方法区主要用于存储虚拟机加载的类信息、常量、静态变量,以及编译器编译后的代码等数据。在jdk1.7及其之前,方法区是堆的一个“逻辑部分”(一片连续的堆空间)...

2018-09-25 21:59:59 1765 2

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

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

2018-09-19 13:52:40 987

原创 并发编程(四)synchronized

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

2018-09-12 21:28:47 128

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

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

2018-09-10 20:52:47 1086

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

CPU高速缓存线程是CPU调度的最小单元,线程涉及的目的最终仍然是更充分的利用计算机处理的效能,但是绝大部分的运算任务不能只依靠处理器“计算”就能完成,处 理器还需要与内存交互,比如读取运算数据、存储运算结果,这个I/O操作是很难消除的。 而由于计算机的存储设备与处理器的运算速度差距非常大,所以现代计算机系统都会增加一层读写速度尽可能接近处理器运算速度的高速缓存来作为内存和处理器之间的缓冲...

2018-08-28 14:55:22 699

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

适配器模式基本介绍 将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。——Gang of Four 适配器模式将一个类的接口适配成用户所期待的。一个适配器通常允许因为接口不兼容而不能一起工作的类能够在一起工作,做法是将类自己的接口包裹在一个已存在的类中。 Adapter 设计模式主要目的组合两个不相干类,常用有两种...

2018-08-20 11:33:12 410

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

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

2018-08-16 19:49:33 197

转载 单例模式

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

2018-08-13 08:58:04 115

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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