自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 资源 (1)
  • 收藏
  • 关注

原创 [Java并发编程实战] 第15章 原子变量与非阻塞同步机制

锁的劣势:如果线程持有锁而延迟,会导致其他的线程的等待。高优先级的线程阻塞,而低优先级的线程持有锁造成 优先级反转(priority inversion)。如果持有锁的线程被永久地阻塞,所有等待这个锁的线程就无法执行下去,造成 死锁(dead lock)。硬件对并发的支持比较并交换CAS:我认为V的值应该是A,如果是,那么将V的值更新为B,否则不修改并告诉V的值实际为...

2019-01-17 19:22:18 202

原创 [Java并发编程实战] 第14章 构建自定义的同步工具

状态依赖性的管理构成前提条件的状态变量必须由对象的锁来保护,从而使他们在测试前提条件的同时保持不变;如果前提条件尚未满足,就必须释放锁,以便其它线程可以修改对象的状态,否则,前提条件就永远无法变成真。在再次测试前提条件之前,必须重新获得锁将前提条件的失败传递给调用者,调用者可以选择休眠等待、自旋等待或者调用Thread.yield可以通过简单的“轮询与休眠”重试机制实现阻塞,同时...

2019-01-17 18:54:59 232

原创 [Java并发编程实战] 第13章 显式锁

Lock与ReentrantLockLock提供了一种无条件的、可轮询的、定时的以及可中断的锁获取操作ReentrantLock实现了Lock接口,并提供了与synchronized相同的互斥性和内存可见性,还提供了可重入的加锁语义可中断的锁获取操作:public boolean sendOnSharedLine(String message) throws Interrp...

2019-01-16 21:03:56 197

原创 [Java并发编程实战] 第12章 并发程序的测试

并发测试大致分两类:安全性测试和活跃性测试正确性测试:找出需要检查的不变性条件和后验条件基本的单元测试对阻塞操作的测试安全性测试(要最大程度检测出一些对执行时序敏感的数据竞争,那么测试中的线程数量应该多于CPU数量,这样在任意时刻都会有一些线程在运行,而另一些被交换出去,从而可以检查线程间交替行为的可预测性)资源管理的测试(堆快照、GC执行)使用回调在访问共享状态的操作中...

2019-01-16 21:02:33 214

原创 [Java并发编程实战] 第11章 性能与可伸缩性

想通过并发获得更好的性能,需要努力做好两件事情:更有效利用现有资源再出现新的处理资源时是程序尽可能地利用这些新的资源可伸缩性:当增加计算资源时(CPU/内存/存储容量/I/O带宽),程序的吞吐量或处理能力能相应地增加Amdahl定律:在增加计算资源的情况下,程序在理论上能够实现最高加速比,这个值取决于程序中可并行组件与串行组件所占的比重:最高加速比(F为串行执行的部分...

2019-01-16 21:01:16 243

原创 [Java并发编程实战] 第10章 避免活跃性危险

死锁锁的获取顺序要一致;如果锁的顺序未知,可以使用“加时赛”锁,在获得两个锁之前,先要获得这个“加时赛”锁,从而保证每次只有一个线程以未知的顺序获得这两个锁协作对象之间产生死锁:如果在持有锁时调用某个外部方法,将出现活跃性问题。在这个外部方法中可能会获取其它锁(这可能会产生死锁),或者阻塞时间过长,导致其它线程无法及时获得当前被持有的锁开放调用:调用某个方法时,不需要持有锁...

2019-01-16 20:59:10 218

原创 [Java并发编程实战] 第9章 图形用户界面应用程序

GUI是单线程的,因为多线程容易死锁,单线程通过线程封闭实现线程安全性:一部分原因在于输入事件的处理过程和GUI组件的面向对象模型之间存在错误的交互;另一个是MVC设计模式的应用导致不一致的锁定顺序——控制模块可以调用模型模块,模型模块将变化通知视图模块,但控制模块还能调用视图模块,并调用模型模块查询模型的状态所有Swing组件和数据模型对象都被封闭在事件线程中,因此任何访问他们的代码都...

2019-01-13 19:30:04 267

原创 [Java并发编程实战] 第8章 线程池的使用

在任务与执行策略之间的隐形耦合只有当任务都是同类型的并且相互独立时,线程池的性能才能达到最佳线程饥饿死锁:线程池小了,正在执行任务的线程在等待处于工作队列中的任务而阻塞对于运行时间较长的任务,可以限定任务等待资源的时间,缓解线程池的响应性问题线程池最优大小:CPU数量 * CPU利用率 *(1 + W/C(等待时间和计算时间的比值))配置ThreadPoolExecu...

2019-01-13 19:29:01 206

原创 [Java并发编程实战] 第7章 取消与关闭

任务取消每个线程有一个boolean类型的中断状态,中断线程时被置为true;静态的interrupted方法将清除当前线程的中断状态,并返回它之前的值,这是清除中断状态的唯一方法阻塞库方法(Thread.sleep/Object.wait)会检查线程何时中断,发现中断提前返回:清除中断状态、抛出InterruptedException。当线程在非阻塞状态下中断时,它的中断状态将...

2019-01-13 19:27:41 227 1

原创 [Java并发编程实战] 第6章 任务执行

在线程中执行任务大多数服务器应用都提供一种自然的任务边界选择方式:以独立的客户请求为边界当为每个请求创建一个线程时,任务处理代码必须是线程安全的,因为有多个任务时会并发调用这段代码无限制创建线程的缺陷:线程生命周期开销非常高资源消耗:活跃的线程会消耗内存,大量线程在竞争CPU时也会产生其他的性能开销稳定性:可以存在线程的数量存在限制,超出限制会抛出OutOfMemory...

2019-01-13 19:26:13 178

原创 [Java并发编程实战] 第5章 基础构建模块

同步容器类包括Vector和Hashtable,线程安全的实现方法是:将状态封装起来并对每个公有方法进行同步,使得每次只有一个线程能访问容器的状态同步容器类都是线程安全的,但在某些情况下需要额外的客户端加锁保护复合操作(迭代、跳转、条件运算)同步容器的迭代器没有考虑并发修改问题,当它们发现迭代过程中容器被修改了(迭代期间检查与容器关联的计数器是否被修改),会“及时失败”,抛出一个...

2019-01-11 09:15:04 217

原创 [Java并发编程实战] 第4章 对象的组合

设计线程安全的类过程包含三个基本要素:找出构成对象状态的所有变量找出约束状态变量的不变性条件建立对象状态的并发管理策略同步策略:如何在不违背对象不变条件或后验条件的情况下对其状态的访问操作进行协同如果在某个操作中包含有基于状态的先验条件,那么这个操作就称为依赖状态的操作实例封闭将对象封装在类的一个实例(作为类的一个私有成员)中,或者封闭在某个作用域内(作为局...

2019-01-10 09:34:23 219

原创 [Java并发编程实战] 第3章 对象的共享

可见性:缺乏同步可能产生:失效数据最低安全性:当线程在没有同步的情况下读取变量时,可能得到一个失效值,但至少是之前某个线程设置的值,而不是一个随机值最低安全性的例外:非volatile类型的64位数值变量,所以多线程共享可变的long和double等类型的变量是不安全的,除非用volatile声明,或用锁保护起来加锁的含义不仅局限于互斥行为,还包括内存可见性。为了确保所有线...

2019-01-10 09:30:28 263

原创 [Java并发编程实战] 第2章 线程安全性

对象的状态中包含了任何可能影响其外部可见行为的数据计算过程中的临时状态仅存在于线程栈上的局部变量中,并且只能由正在执行的线程访问无状态对象一定是线程安全的原子性:当某个计算正确性取决于多个线程的交替执行时序时,就会发生竞态条件先检查后执行:大多数竞态条件的本质,基于一种可能失效的观察结果来做出判断或者执行某个计算原子操作:对于访问同一个状态的所有操作(包括该...

2019-01-10 09:28:38 173

原创 [深入理解Java虚拟机] 第13章 线程安全与锁优化

文章目录线程安全Java语言中的线程安全1. 不可变2. 绝对线程安全3. 相对线程安全4. 线程兼容5. 线程对立线程安全的实现方法1. 互斥同步2. 非阻塞同步3. 无同步方案锁优化1. 自旋锁与自适应自旋2. 锁消除3. 锁粗化4. 轻量级锁5. 偏向锁笔者认为《Java Concurrency In Practice》的作者Brian Goetz对“线程安全”有一个比较恰当的定义:“当...

2019-01-08 09:12:32 215

原创 [深入理解Java虚拟机] 第12章 Java内存模型与线程

文章目录Java内存模型1. 主内存与工作内存2. 内存间交互操作3. volatile型变量的特殊规则4. 对于long和double型变量的特殊规则5. 原子性、可见性与有序性6. 先行发生原则Java与线程1. 线程的实现1.1. 使用内核线程实现1.2. 使用用户进程实现1.3. 使用用户线程加轻量级进程混合实现1.4. Java线程的实现2. Java的线程调度2.1. 协同式线程调度2...

2019-01-08 09:12:22 292

原创 [深入理解Java虚拟机] 第11章 晚期(运行期)优化

文章目录HotSpot虚拟机内的即时编译器解释器与编译器编译对象与触发条件编译过程编译优化技术1. 公共子表达式消除2. 数组边界检查消除3. 方法内联4. 逃逸分析Java与C/C++的编译器对比HotSpot虚拟机内的即时编译器解释器与编译器许多主流的商用虚拟机,如HotSpot、J9等,都同时包含解释器与编译器。解释器与编译器两者各有优势:当程序需要迅速启动和执行的时候,解释器可以首先...

2019-01-08 09:12:13 284

原创 [深入理解Java虚拟机] 第10章 早期(编译期)优化

文章目录Javac编译器1. 解析与填充符号表1.1. 词法、语法分析1.2. 填充符号表2. 注解处理器3. 语义分析和字节码生成3.1. 标注检查3.2. 数据及控制流分析3.3. 解语法糖3.4. 字节码生成Java语法糖1. 泛型与类型擦除2. 自动装箱、拆箱与遍历循环3. 条件编译Java语言的“编译期”其实是一段“不确定”的操作过程,因为它可能是指一个前端编译器(其实叫“编译器的前端...

2019-01-08 09:12:01 345

原创 [深入理解Java虚拟机] 第8章 虚拟机字节码执行引擎

文章目录运行时栈帧结构1. 局部变量表2. 操作数栈3. 动态连接4. 返回地址5. 附加信息方法调用1. 解析2. 分派2.1. 静态分派2.2. 动态分派2.3. 单分派与多分派2.4. 虚拟机动态分派的实现3. 动态类型语言支持3.1. 动态类型语言MethodHandleinvokedynamic指令基于栈的字节码解释执行引擎运行时栈帧结构1. 局部变量表局部变量表是一组变量值存...

2019-01-07 13:54:26 515

原创 [深入理解Java虚拟机] 第7章 虚拟机类加载机制

文章目录类加载时机类加载过程1. 加载2. 验证2.1. 文件格式验证2.2. 元数据验证2.3. 字节码验证2.4. 符号引用验证。3. 准备4. 解析5. 初始化类加载器1. 类与类加载器2. 双亲委派模型与那些在编译时需要进行连接工作的语言不同,在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为Java应用程序...

2019-01-07 13:53:00 158

原创 [深入理解Java虚拟机] 第6章 类文件结构

文章目录类文件的结构1. 魔数与Class文件的版本2. 常量池3. 访问标志4. 类索引、父类索引与接口索引集合5. 字段表集合6. 方法表集合7. 属性表集合7.1. Code属性7.2. Exceptions属性7.3. LineNumberTable属性7.4. LocalVariableTable属性7.5. SourceFile属性7.6. ConstantValue属性7.7. In...

2019-01-07 13:51:24 312

原创 [深入理解Java虚拟机] 第4、5章 性能监控与调优

文章目录JDK的命令行工具jps:虚拟机进程状况工具jstat:虚拟机统计信息监视工具jinfo:Java配置信息工具jmap:Java内存映像工具jhat:虚拟机堆转储快照分析工具jstack:Java堆栈跟踪工具HSDIS:JIT生成代码反汇编JDK的可视化工具JConsole:Java监视与管理控制台VisualVM:多合一故障处理工具调优案例JDK的命令行工具jps:虚拟机进程状况工具...

2019-01-07 13:50:07 145

原创 [深入理解Java虚拟机] 第3章 垃圾收集器与内存分配策略

文章目录判断对象的死亡1. 引用引用分类强引用软引用弱引用虚引用2. 判断对象是否存活引用计数法可达性分析算法可作为GC Roots的对象垃圾回收1. 标记过程2. 回收方法区3. 垃圾收集算法标记-清除算法复制算法标记-整理算法分代收集算法4. Hotspot的算法实现4.1. 枚举根节点4.2. 安全点4.3. 安全区域5. GC日志6. 内存分配与回收策略Minor GC & Ful...

2019-01-07 13:34:24 161

原创 [模式识别] [讲义] 深度学习

2019-01-07 09:40:48 339

原创 [模式识别] [讲义] 错误率-Bayes与最近邻对比

2019-01-07 09:40:36 1429

原创 [模式识别] [讲义] 集成学习-Adaboost训练算法

2019-01-07 09:40:26 220

原创 [模式识别] [讲义] 学习理论

2019-01-07 09:40:15 215

原创 [模式识别] [讲义] 聚类算法

2019-01-07 09:39:49 185

原创 [模式识别] [讲义] 因子分析Factor Analysis

2019-01-06 14:39:16 302

原创 [模式识别] [讲义] 独立元分析ICA

2019-01-06 14:36:49 478

原创 [模式识别] [讲义] 线性判别分析LDA

2019-01-06 14:31:43 303

原创 [模式识别] [讲义] 主成分分析PCA

2019-01-06 14:28:42 526

原创 [模式识别] [讲义] 对偶与SVM

2019-01-06 14:23:10 215

原创 [模式识别] [讲义] Bayes公式与Naive Bayes

2019-01-06 14:02:45 188

原创 [模式识别] [讲义] 生成对抗网络GAN

2019-01-06 13:57:19 433

原创 [模式识别] [讲义] 混合高斯函数与EM算法

无监督学习

2019-01-06 13:52:36 232

原创 [模式识别] [讲义] 高斯判别分析

生成式学习,有监督的学习

2019-01-06 13:45:25 240

原创 [模式识别] [讲义] 逻辑回归与感知器算法

X−>Y{Y连续−>回归问题Y离散−>分类问题X -> Y\begin{cases}Y连续 -> 回归问题\\Y离散 -> 分类问题\\\end{cases}X−>Y{Y连续−>回归问题Y离散−>分类问题​...

2019-01-06 13:30:37 241

原创 [Shell] [笔记]UNIX/Linux/OSX中的Shell编程

UNIX/Linux/OSX中的Shell编程(第4版)Stephen G. Kochan Patrick Wood著文章目录UNIX/Linux/OSX中的Shell编程(第4版)基础1. 使用文件2. 使用目录3. 文件名替换*? 或 [][!chars]4. 文件名中的空格5. 标准输入/输出和I/O重定向6. 标准错误7. 管道8. Shell9. 正则表达式10. 常用字符的八进制...

2019-01-01 22:03:52 1801

Appium测试原理与工具安装(PPT演示)

对Appium的发展历史、安卓端测试原理进行讲解,同时简要介绍了Appium的安装配置与使用流程。

2018-10-31

空空如也

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

TA关注的人

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