自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

张伯毅的专栏

人生就是一道证明题,证明我们的存在不是偶然....

原创 JAVA : ReentrantReadWritelock

ReentrantReadWriteLock采用读写分 离的策略,允许多个线程可以同时获取读锁 。 架构图 读写锁的内部维护了 一个 ReadLock 和一个 WriteLock,它们依赖 Sync 实现具体功能 。 而Sync继承自AQS,并且也提供了公平和非公平的实现。 下面只...

2019-06-27 18:09:18

阅读数 114

评论数 0

原创 Thread.sleep、Object.wait、LockSupport.park 区别图解

Thread.sleep、Object.wait、LockSupport.park 区别如下图: 参考: Java 并发编程之美 https://blog.csdn.net/u013332124/article/details/84647915

2019-06-26 17:53:22

阅读数 710

评论数 0

原创 JAVA 可重入锁: ReentrantLock

概念 ReentrantLock重入锁,是实现Lock接口的一个类,也是在实际编程中使用频率很高的一个锁,支持重入性,表示能够对共享资源能够重复加锁,即当前线程获取该锁再次获取不会被阻塞。在java关键字synchronized隐式支持重入性, synchronized通过获取自增,释放自减的方...

2019-06-26 17:17:10

阅读数 61

评论数 0

原创 Java CopyOnWriteArrayList 概述

CopyOnWriteArrayList是一个线程 安全的 ArrayList,对其进行的修改操作都是在底层的一个复制的数组(快照)上进行的 , 也就是使用了写时复制策略。 在 CopyOnWriteArrayList 的类图中,每个 CopyOnWriteArrayList 对象...

2019-06-26 14:17:30

阅读数 121

评论数 0

原创 JDK 8 原子操作类 LongAdder

AtomicLong 通过 CAS 提供了非阻塞的原子性操作,相 比使用阻塞算法的 同步器来说它的性能己经很好了,但是 JDK 开发组并不满足于此 。 使用 AtomicLong 时, 在高并发下大量线程会同时去竞争更新 同→个原子变量,但是由于同时只有一个线程的 CAS 操作会成功,这就造成了大...

2019-06-26 11:21:21

阅读数 610

评论数 0

原创 ConcurrentHashMap BUG 死锁

BUG 代码: package com.zl.map.concurrent; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public class ConcurrentHashMapBug { ...

2019-06-25 18:29:02

阅读数 704

评论数 0

原创 在linux系统中查看 缓存行 [ cacheline ] 的大小

linux系统中缓存行 [ cacheline ] 默认值: 64byte 为了解决计算机系统中主内存与 CPU 之间运行速度差问题,会在 CPU 与主内存之间 添加一级或者多级高速缓冲存储器( Cache)。这个 Cache 一般是被集成到 CPU 内部的, 所以也叫 CPU Cach...

2019-06-25 16:53:07

阅读数 1205

评论数 0

原创 Java 多线程并发线程基础

进程&线程 线程是进程中的一个实体,线程 本身是不会独立存在的 。 进程是代码在数据集合上的 一 次运行活动 , 是系统进行资源分配 和调度的基本单位, 线程则是进程的一个执行路径, 一个进程中至少有一个线程,进程中 的多个线程共享进程的资源。 操作系统在分配资源时是把资源分配给进程...

2019-06-25 16:37:40

阅读数 84

评论数 0

原创 一张图理解JAVA 多线程创建

Java 中有三种线程创建方式, 实现 Runnable接口的 run方法, 继承 Thread类 并重写 run 的方法, 使用 FutureTask方式。

2019-06-25 11:46:47

阅读数 97

评论数 0

原创 JAVA 队列: SynchronousQueue

SynchronousQueue 是一个不存储元素的阻塞队列。每一个 put 操作必须等待一个 take 操作,否则不能继续添加元素。 SynchronousQueue 可以看成是一个传球手,负责把生产者线程处理的数据直接传递给消费者线程。队列本身并不存储任何元素,非常适合于传递性场景,比如在一...

2019-06-24 17:54:20

阅读数 142

评论数 0

原创 Java 同步器

java.util.concurrent 包包含了几个能帮助人们管理相互合作的线程集的类见表 14-5。这 些机制具有为线程之间的共用集结点模式(common rendezvous patterns) 提供的“ 预置功能” ( canned functionality ) 0 如果有一个相互合作的...

2019-06-24 11:44:05

阅读数 45

评论数 0

原创 Java 注解

4 种标准元注解 元注解的作用是负责注解其他注解。 Java5.0 定义了 4 个标准的 meta-annotation 类型,它们被用来提供对其它 annotation 类型作说明。 @Target 修饰的对象范围 @Target 说明了 Annotation 所修饰的对象范围: Anno...

2019-06-21 16:25:56

阅读数 75

评论数 0

原创 Java 反射 (运行状态中知道类所有的属性和方法)

在 Java 中的反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法;并且对于任意一个对象,都能够调用它的任意一个方法;这种动态获取信息以及动态调用对象方法的功能成为 Java 语言的反射机制。 编译时类型和运行时类型 编译时的类型由声明对象时实用的类型来决定...

2019-06-21 15:16:15

阅读数 562

评论数 0

原创 Java 异常分类

异常分类:Error 和 Exception Error Error 类是指 java 运行时系统的内部错误和资源耗尽错误。应用程序不会抛出该类对象。如果 出现了这样的错误,除了告知用户,剩下的就是尽力使程序安全的终止。 Exception(RuntimeException、Che...

2019-06-21 15:01:05

阅读数 718

评论数 0

原创 JDK1.8 ConcurrentHashMap 源码解析

概述 ConcurrentHashMap 是 util.concurrent 包的重要成员。 ConcurrentHashMap 的源代码会涉及到散列算法,链表数据结构和红黑树 Java8 ConcurrentHashMap 源码真心不简单,最难的在于扩容,数据迁移操作不容易看懂。 前面我...

2019-06-20 14:08:13

阅读数 101

评论数 0

原创 JDK1.8 HashMap和TreeMap区别,读懂这一篇就够了

刚刚被问到HashMap和TreeMap 有什么区别,想了想,就整理一下吧. 1.数据结构 HashMap: 数组+列表+红黑树 TreeMap: 红黑树 2. 因为数据结构,导致节点的实体类不一样 HashMap: 两种 Node 和 TreeNode (支持链表) ...

2019-06-18 11:45:24

阅读数 1092

评论数 0

原创 JDK1.8 HashMap 源码解析

HashMap 源码解析 1.图解: 2.源码 为了方便 DEBUG , 我把 HashMap 的源码分为了三部分 import java.io.IOException; import java.io.InvalidObjectExc...

2019-06-17 16:30:52

阅读数 80

评论数 0

转载 生成 HashCode 一致的字符串

生成 HashCode 一致的字符串 package com.zl.map; import java.math.BigDecimal; import java.util.Random; /** * “中间相遇法”是生日攻击的一种变形,它不比较Hash值,而是比较链中的中间变量...

2019-06-17 11:51:14

阅读数 270

评论数 0

原创 Java 位运算符

Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。 位运算符作用在所有的位上,并且按位运算。假设a = 60,b = 13;它们的二进制格式表示将如下: A = 0011 1100 B = 0000 1...

2019-06-13 19:18:56

阅读数 61

评论数 0

原创 服务器参考性能

参考机器服务配置,用于估算集群规模,具体情况,参考当前市场. --2019年06月 戴尔R730服务器 2U双路. 一台 3 万.+ CPU: 两颗 16 核 内存: 24 个接口(单条最大 32G) 最大容量 768G 硬盘: 8块硬盘 单块最大8T 共 64T 网卡: 集成四口,千...

2019-06-13 16:30:23

阅读数 77

评论数 0

原创 使用intellij idea 查看Java字节码

最近在研究 jvm ,需要查看字节码. 整理使用intellij idea 查看Java字节码 使用方式如下: 内容参考: Program:/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home...

2019-06-13 09:58:36

阅读数 348

评论数 0

原创 JAVA 对象头解析

一个Java对象在JVM中是由一个对应角色的oop对象来描述的, 比如instanceOopDesc用来描述普通实例对象,arrayOopDesc用来描述数组对象,而这些类型的oop对象均是继承自oopDesc。 class oopDesc { friend class VMStru...

2019-06-12 14:44:34

阅读数 820

评论数 0

原创 JVM 虚拟机字节码指令表速查

字节码 助记符 指令含义 0x00 nop None 0x01 aconst_null 将null推送至栈顶 0x02 iconst_m1 将int型-1推送至栈顶 0x03 iconst_0 将int型0推送至栈顶 ...

2019-06-11 14:34:20

阅读数 115

评论数 0

原创 C 语言 与 Java 区别 梳理

数据类型 c 语言( Linux x86_64) java 语言 定义常量 #define 预处理器 const 关键字 defind和 const 区别 C存储类 auto 存储类 register 存储类 static 存储类 extern 存储类 C判断 C循环 ...

2019-06-10 18:34:46

阅读数 86

评论数 0

转载 项目中常用的19条MySQL优化

一、EXPLAIN 做MySQL优化,我们要善用EXPLAIN查看SQL执行计划。 下面来个简单的示例,标注(1,2,3,4,5)我们要重点关注的数据 type列,连接类型。一个好的sql语句至少要达到range级别。杜绝出现all级别 key列,使用到的索引名。如果没有选择索引,值是N...

2019-06-10 16:37:28

阅读数 76

评论数 0

原创 Linux 性能优化笔记:优化性能问题的一般方法

从系统资源瓶颈和应用程序瓶颈,这两个角度来分析性能问题的根源。 从系统资源瓶颈的角度来说,USE 法是最为有效的方法,即从使用率、饱和度以及错误数这三个方面,来分析 CPU、内存、磁盘和文件系统 I/O、网络以及内核资源限制等各类软硬件资源。至于这些资源的分析方法,我也带你一起回顾了,咱们专栏前...

2019-06-05 18:24:44

阅读数 301

评论数 0

原创 Linux 性能优化笔记:分析性能问题的一般步骤

应用程序的监控,可以分为指标监控和日志监控两大块。 指标监控,主要是对一定时间段内的性能指标进行测量,然后再通过时间序列的方式,进行处理、存储和告警。 而日志监控,则可以提供更详细的上下文信息,通常通过 ELK 技术栈,来进行收集、索引和图形化展示。 在跨多个不同应用的复杂业务...

2019-06-05 18:18:29

阅读数 121

评论数 0

原创 Linux 性能优化笔记:应用监控

指标监控 跟系统监控一样,在构建应用程序的监控系统之前,首先也需要确定,到底需要监控哪些指标。特别是要清楚,有哪些指标可以用来快速确认应用程序的性能问题。 对系统资源的监控,USE 法简单有效,却不代表其适合应用程序的监控。举个例子,即使在 CPU 使用率很低的时候,也不能说明应用程序就没有性...

2019-06-05 18:12:36

阅读数 88

评论数 0

原创 Linux 性能优化笔记:系统监控

USE 法 在开始监控系统之前,你肯定最想知道,怎么才能用简洁的方法,来描述系统资源的使用情况。你当然可以使用专栏中学到的各种性能工具,来分别收集各种资源的使用情况。不过不要忘记,每种资源的性能指标可都有很多,使用过多指标本身耗时耗力不说,也不容易为你建立起系统整体的运行状况。 在这里,我为你...

2019-06-05 18:06:40

阅读数 105

评论数 0

原创 Linux 性能优化笔记:Linux 性能工具速查

CPU 性能工具 首先,从 CPU 的角度来说,主要的性能指标就是 CPU 的使用率、上下文切换以及 CPU Cache 的命中率等。下面这张图就列出了常见的 CPU 性能指标。 内存性能工具 接着我们来看内存方面。从内存的角度来说,主要的性能指标,就是系统内存的分配和使用、...

2019-06-05 18:00:17

阅读数 246

评论数 0

原创 Linux 性能优化笔记:网络优化

确定优化目标 跟 CPU 和 I/O 方面的性能优化一样,优化前,我会先问问自己,网络性能优化的目标是什么?换句话说,我们观察到的网络性能指标,要达到多少才合适呢? 实际上,虽然网络性能优化的整体目标,是降低网络延迟(如 RTT)和提高吞吐量(如 BPS 和 PPS),但具体到不同应用中,每个...

2019-06-05 17:46:42

阅读数 472

评论数 0

原创 Java8 命令详解

Java 命令: 用法: java [-options] class [args...] (执行类) 或 java [-options] -jar jarfile [args...] (执行 jar 文件) 其中选项包括: -d32 ...

2019-06-05 16:39:36

阅读数 189

评论数 0

原创 Linux 性能优化笔记:网络性能评估

上一节,我们回顾了经典的 C10K 和 C1000K 问题。简单回顾一下,C10K 是指如何单机同时处理 1 万个请求(并发连接 1 万)的问题,而 C1000K 则是单机支持处理 100 万个请求(并发连接 100 万)的问题。 I/O 模型的优化,是解决 C10K 问题的最佳良方。Linux...

2019-06-05 12:22:51

阅读数 404

评论数 0

原创 Linux 性能优化笔记:C10K 和 C1000K

C10K 和 C1000K 的首字母 C 是 Client 的缩写。C10K 就是单机同时处理 1 万个请求(并发连接 1 万)的问题,而 C1000K 也就是单机支持处理 100 万个请求(并发连接 100 万)的问题。 C10K C10K 问题最早由 Dan Kegel 在 1999 ...

2019-06-05 11:38:30

阅读数 223

评论数 0

原创 Linux 性能优化笔记:网络基础

网络模型 说到网络,我想你肯定经常提起七层负载均衡、四层负载均衡,或者三层设备、二层设备等等。那么,这里说的二层、三层、四层、七层又都是什么意思呢? 实际上,这些层都来自国际标准化组织制定的开放式系统互联通信参考模型(Open System Interconnection Reference ...

2019-06-05 09:59:30

阅读数 78

评论数 0

原创 Linux 性能优化笔记:系统I/O 优化思路

I/O 基准测试 按照我的习惯,优化之前,我会先问自己, I/O 性能优化的目标是什么?换句话说,我们观察的这些 I/O 性能指标(比如 IOPS、吞吐量、延迟等),要达到多少才合适呢? 事实上,I/O 性能指标的具体标准,每个人估计会有不同的答案,因为我们每个人的应用场景、使用的文件系统和物...

2019-06-04 17:18:54

阅读数 322

评论数 0

原创 Linux 性能优化笔记:系统I/O的瓶颈分析

文件系统 I/O 性能指标 首先,最容易想到的是存储空间的使用情况,包括容量、使用量以及剩余空间等。我们通常也称这些为磁盘空间的使用量,因为文件系统的数据最终还是存储在磁盘上。 不过要注意,这些只是文件系统向外展示的空间使用,而非在磁盘空间的真实用量,因为文件系统的元数据也会占用磁盘空间。 ...

2019-06-04 17:08:21

阅读数 439

评论数 0

原创 Linux 性能优化笔记:案例【 SQL查询慢 】

分析一个数据库的案例。这是一个基于 Python Flask 的商品搜索应用,商品信息存在 MySQL 中。这个应用可以通过 MySQL 接口,根据客户端提供的商品名称,去数据库表中查询商品信息。 案例准备 本次案例还是基于 Ubuntu 18.04,同样适用于其他的 Linux 系统。我...

2019-06-04 16:57:19

阅读数 80

评论数 0

原创 Linux 性能优化笔记:案例【 磁盘I/O延迟 】

文件系统,是对存储设备上的文件进行组织管理的一种机制。为了支持各类不同的文件系统,Linux 在各种文件系统上,抽象了一层虚拟文件系统 VFS。 它定义了一组所有文件系统都支持的数据结构和标准接口。这样,应用程序和内核中的其他子系统,就只需要跟 VFS 提供的统一接口进行交互。 在文件系统的下...

2019-06-04 16:29:22

阅读数 683

评论数 0

原创 Linux 性能优化笔记: 磁盘I/O

文件系统是对存储设备上的文件,进行组织管理的一种机制。而 Linux 在各种文件系统实现上,又抽象了一层虚拟文件系统 VFS,它定义了一组,所有文件系统都支持的,数据结构和标准接口。 这样,对应用程序来说,只需要跟 VFS 提供的统一接口交互,而不需要关注文件系统的具体实现;对具体的文件系统来说...

2019-06-04 16:15:19

阅读数 424

评论数 0

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