书籍阅读
Blanchedingding
梦想是开甜品店、成为美妆博主,以及养一只狗子。
展开
-
[深入理解Java虚拟机] 第2章 Java内存区域与内存溢出异常
运行时数据区域1. 程序计数器:当前线程所执行的字节码的行号指示器,每个线程一个(“线程私有”),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是Native方法,这个计数器值为空(Undefined)。[像System.currentTimeMi...转载 2018-06-28 20:22:49 · 173 阅读 · 0 评论 -
[Java并发编程实战] 第7章 取消与关闭
任务取消每个线程有一个boolean类型的中断状态,中断线程时被置为true;静态的interrupted方法将清除当前线程的中断状态,并返回它之前的值,这是清除中断状态的唯一方法阻塞库方法(Thread.sleep/Object.wait)会检查线程何时中断,发现中断提前返回:清除中断状态、抛出InterruptedException。当线程在非阻塞状态下中断时,它的中断状态将...原创 2019-01-13 19:27:41 · 239 阅读 · 1 评论 -
[Java并发编程实战] 第8章 线程池的使用
在任务与执行策略之间的隐形耦合只有当任务都是同类型的并且相互独立时,线程池的性能才能达到最佳线程饥饿死锁:线程池小了,正在执行任务的线程在等待处于工作队列中的任务而阻塞对于运行时间较长的任务,可以限定任务等待资源的时间,缓解线程池的响应性问题线程池最优大小:CPU数量 * CPU利用率 *(1 + W/C(等待时间和计算时间的比值))配置ThreadPoolExecu...原创 2019-01-13 19:29:01 · 213 阅读 · 0 评论 -
[Java并发编程实战] 第9章 图形用户界面应用程序
GUI是单线程的,因为多线程容易死锁,单线程通过线程封闭实现线程安全性:一部分原因在于输入事件的处理过程和GUI组件的面向对象模型之间存在错误的交互;另一个是MVC设计模式的应用导致不一致的锁定顺序——控制模块可以调用模型模块,模型模块将变化通知视图模块,但控制模块还能调用视图模块,并调用模型模块查询模型的状态所有Swing组件和数据模型对象都被封闭在事件线程中,因此任何访问他们的代码都...原创 2019-01-13 19:30:04 · 277 阅读 · 0 评论 -
[Java并发编程实战] 第2章 线程安全性
对象的状态中包含了任何可能影响其外部可见行为的数据计算过程中的临时状态仅存在于线程栈上的局部变量中,并且只能由正在执行的线程访问无状态对象一定是线程安全的原子性:当某个计算正确性取决于多个线程的交替执行时序时,就会发生竞态条件先检查后执行:大多数竞态条件的本质,基于一种可能失效的观察结果来做出判断或者执行某个计算原子操作:对于访问同一个状态的所有操作(包括该...原创 2019-01-10 09:28:38 · 185 阅读 · 0 评论 -
[Java并发编程实战] 第3章 对象的共享
可见性:缺乏同步可能产生:失效数据最低安全性:当线程在没有同步的情况下读取变量时,可能得到一个失效值,但至少是之前某个线程设置的值,而不是一个随机值最低安全性的例外:非volatile类型的64位数值变量,所以多线程共享可变的long和double等类型的变量是不安全的,除非用volatile声明,或用锁保护起来加锁的含义不仅局限于互斥行为,还包括内存可见性。为了确保所有线...原创 2019-01-10 09:30:28 · 273 阅读 · 0 评论 -
[Java并发编程实战] 第4章 对象的组合
设计线程安全的类过程包含三个基本要素:找出构成对象状态的所有变量找出约束状态变量的不变性条件建立对象状态的并发管理策略同步策略:如何在不违背对象不变条件或后验条件的情况下对其状态的访问操作进行协同如果在某个操作中包含有基于状态的先验条件,那么这个操作就称为依赖状态的操作实例封闭将对象封装在类的一个实例(作为类的一个私有成员)中,或者封闭在某个作用域内(作为局...原创 2019-01-10 09:34:23 · 231 阅读 · 0 评论 -
[Java并发编程实战] 第10章 避免活跃性危险
死锁锁的获取顺序要一致;如果锁的顺序未知,可以使用“加时赛”锁,在获得两个锁之前,先要获得这个“加时赛”锁,从而保证每次只有一个线程以未知的顺序获得这两个锁协作对象之间产生死锁:如果在持有锁时调用某个外部方法,将出现活跃性问题。在这个外部方法中可能会获取其它锁(这可能会产生死锁),或者阻塞时间过长,导致其它线程无法及时获得当前被持有的锁开放调用:调用某个方法时,不需要持有锁...原创 2019-01-16 20:59:10 · 227 阅读 · 0 评论 -
[Java并发编程实战] 第11章 性能与可伸缩性
想通过并发获得更好的性能,需要努力做好两件事情:更有效利用现有资源再出现新的处理资源时是程序尽可能地利用这些新的资源可伸缩性:当增加计算资源时(CPU/内存/存储容量/I/O带宽),程序的吞吐量或处理能力能相应地增加Amdahl定律:在增加计算资源的情况下,程序在理论上能够实现最高加速比,这个值取决于程序中可并行组件与串行组件所占的比重:最高加速比(F为串行执行的部分...原创 2019-01-16 21:01:16 · 254 阅读 · 0 评论 -
[Java并发编程实战] 第12章 并发程序的测试
并发测试大致分两类:安全性测试和活跃性测试正确性测试:找出需要检查的不变性条件和后验条件基本的单元测试对阻塞操作的测试安全性测试(要最大程度检测出一些对执行时序敏感的数据竞争,那么测试中的线程数量应该多于CPU数量,这样在任意时刻都会有一些线程在运行,而另一些被交换出去,从而可以检查线程间交替行为的可预测性)资源管理的测试(堆快照、GC执行)使用回调在访问共享状态的操作中...原创 2019-01-16 21:02:33 · 227 阅读 · 0 评论 -
[Java并发编程实战] 第13章 显式锁
Lock与ReentrantLockLock提供了一种无条件的、可轮询的、定时的以及可中断的锁获取操作ReentrantLock实现了Lock接口,并提供了与synchronized相同的互斥性和内存可见性,还提供了可重入的加锁语义可中断的锁获取操作:public boolean sendOnSharedLine(String message) throws Interrp...原创 2019-01-16 21:03:56 · 205 阅读 · 0 评论 -
[码出高效] 阿里巴巴Java开发手册 1.4.0
在做微服务拆分相关的课题,会涉及到模块化重构和代码重构相关的东西,重构的速度和质量很大程度上取决于代码原本质量的好坏,所以看了一下这本书,有些知识点我也不知道,所以摘抄了其中比较重要的部分规则。文章目录编程规约命名风格常量定义代码格式OOP规约集合处理并发处理控制语句其它异常日志异常处理日志规约单元测试安全规约MySQL数据库建表规约索引规约SQL语句ORM映射工程结构应用分层二方库依赖服务器设...转载 2019-06-26 21:55:48 · 508 阅读 · 0 评论 -
[Java并发编程实战] 第6章 任务执行
在线程中执行任务大多数服务器应用都提供一种自然的任务边界选择方式:以独立的客户请求为边界当为每个请求创建一个线程时,任务处理代码必须是线程安全的,因为有多个任务时会并发调用这段代码无限制创建线程的缺陷:线程生命周期开销非常高资源消耗:活跃的线程会消耗内存,大量线程在竞争CPU时也会产生其他的性能开销稳定性:可以存在线程的数量存在限制,超出限制会抛出OutOfMemory...原创 2019-01-13 19:26:13 · 184 阅读 · 0 评论 -
[深入理解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 · 225 阅读 · 0 评论 -
[深入理解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 · 305 阅读 · 0 评论 -
[Java并发编程实战] 第5章 基础构建模块
同步容器类包括Vector和Hashtable,线程安全的实现方法是:将状态封装起来并对每个公有方法进行同步,使得每次只有一个线程能访问容器的状态同步容器类都是线程安全的,但在某些情况下需要额外的客户端加锁保护复合操作(迭代、跳转、条件运算)同步容器的迭代器没有考虑并发修改问题,当它们发现迭代过程中容器被修改了(迭代期间检查与容器关联的计数器是否被修改),会“及时失败”,抛出一个...原创 2019-01-11 09:15:04 · 232 阅读 · 0 评论 -
[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 · 1884 阅读 · 0 评论 -
[深入理解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 · 169 阅读 · 0 评论 -
[深入理解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 · 155 阅读 · 0 评论 -
[深入理解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 · 331 阅读 · 0 评论 -
[深入理解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 · 170 阅读 · 0 评论 -
[深入理解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 · 527 阅读 · 0 评论 -
[深入理解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 · 356 阅读 · 0 评论 -
[深入理解Java虚拟机] 第11章 晚期(运行期)优化
文章目录HotSpot虚拟机内的即时编译器解释器与编译器编译对象与触发条件编译过程编译优化技术1. 公共子表达式消除2. 数组边界检查消除3. 方法内联4. 逃逸分析Java与C/C++的编译器对比HotSpot虚拟机内的即时编译器解释器与编译器许多主流的商用虚拟机,如HotSpot、J9等,都同时包含解释器与编译器。解释器与编译器两者各有优势:当程序需要迅速启动和执行的时候,解释器可以首先...原创 2019-01-08 09:12:13 · 296 阅读 · 0 评论 -
[Java并发编程实战] 第14章 构建自定义的同步工具
状态依赖性的管理构成前提条件的状态变量必须由对象的锁来保护,从而使他们在测试前提条件的同时保持不变;如果前提条件尚未满足,就必须释放锁,以便其它线程可以修改对象的状态,否则,前提条件就永远无法变成真。在再次测试前提条件之前,必须重新获得锁将前提条件的失败传递给调用者,调用者可以选择休眠等待、自旋等待或者调用Thread.yield可以通过简单的“轮询与休眠”重试机制实现阻塞,同时...原创 2019-01-17 18:54:59 · 241 阅读 · 0 评论 -
[Java并发编程实战] 第15章 原子变量与非阻塞同步机制
锁的劣势:如果线程持有锁而延迟,会导致其他的线程的等待。高优先级的线程阻塞,而低优先级的线程持有锁造成 优先级反转(priority inversion)。如果持有锁的线程被永久地阻塞,所有等待这个锁的线程就无法执行下去,造成 死锁(dead lock)。硬件对并发的支持比较并交换CAS:我认为V的值应该是A,如果是,那么将V的值更新为B,否则不修改并告诉V的值实际为...原创 2019-01-17 19:22:18 · 209 阅读 · 0 评论 -
[重构] 改善既有代码的设计
在做微服务拆分相关的课题,会涉及到模块化重构和代码重构相关的东西,重构的速度和质量很大程度上取决于代码原本质量的好坏,所以看了一下这本书,有些知识点我也不知道,所以摘抄了其中比较重要的部分规则。文章目录重构——改善既有代码的设计序前言第1章 重构,第一个案例第2章 重构原则第3章 代码的坏味道第4章 构筑测试体系第5章 重构列表第6章 重新组织函数第7章 在对象之间搬移特性第8章 重新组织数据第...转载 2019-07-02 16:00:49 · 423 阅读 · 0 评论