关于java中的interrupt

1. interrupt知识点

PS: 以下总结基于JDK8

本文不会完整说明interrupt,只会罗列一些比较重要的点。完整了解Thread.interrupt可以看参考资料。

以下的一些理解新的有助于理解参考资料的文章:

interrupt方法调用后,针对BLOCKED状态的线程,只是设定中断标志位为true。是否响应中断(感知这个标志位的变化)取决于API的设计。JDK的阻塞IO API、Synchronized同步块、还有Lock中的很多方法(不包括lockInterruptibly)都是不响应中断的。当然调用线程可以利用标志位判断来使得自己设计的API是......

mac开发环境配置(2017)

1. 概述

以前一直用的windows,后来公司发了mac之后,用了大半年,终于感受到mac系统作为程序员工作系统的优势。类UNIX环境、很多优秀的工具、强大的触摸板和手势让我外接显示器的时候,多窗口操作的效率得到大大提升。

这里简单对自己开发环境的配置做个介绍,分享给大家,主要从以下几方面来说明:

系统配置: 主要是为了关闭一些效果,减少散热;另外一些方便的配置可以提升效率

开发工具配置

以下是我的mac,用的2017款mac pro 带touch bar,平时外接2台4K显示器,P2715Q

CPU的三种架构

1. SMP

SMP (Symmetric Multiprocessing) , 对称多处理器。

优点:适用于小于等于4个CPU的架构,共享CPU、内存和IO

缺点: 横向扩展差,CPU一多总线成为瓶颈

通过以下命令发现只有一个Node则说明为SMP:

ls /sys/devices/system/node/

2. MPP

MPP (Massive Parallel......

JAVA代码优化记录

1. 避免伪共享(false sharing)

1.1 概述

代码层面放的比较近的字段频繁一起并发变更可能导致需要写相同的cache line,写cache line根据MESI协议,要让别的cpu下对应的cache line保持禁写。这导致原本可以从L1 L2cache中获取的数据不得不从L3或者内存中获取,命中率大大降低,性能下降。

参考资料:http://ifeve.com/from-javaeye-false-sharing/

1.2 解决办法

避免伪共享的关键就是避免并发访问的数据在一个cache line。那么解决办法也比较简单了,需要避免伪共享的对象,加个......

slab机制与伙伴算法

1. 伙伴系统(伙伴算法)

1.1 概览

伙伴系统(buddy system)或者称伙伴算法主要应用在操作系统的内存分配中。在操作系统课程中也是必提的概念。

该算法主要好处是:

搜索分配内存块较为快速,O(logN)时间复杂度

外部碎片概率较低: 按2的幂划分,可以理解为一种分层次的Best fit

1.2 分配和释放内存过程

维基百科有个例子可以参考:https://en.wikipedia.org/wiki/Buddy_memory_allocation

总体思想就是:分配内存的时候按照基本内存块大小,按照2的幂来分裂,直到best fit满足; 释放内......