随笔分类 - jvm和多线程
摘要:jetty处理过程: 1 new Server() (1)初试化线程池 生成固定大小线程数,新来的线程放入BlockingQueue。 (2)初始化ServerConnector 初始化 scheduleExcotorScheduler 做一些线程调度,例如定期执行的线程等。 初始化 byteBuf
阅读全文
摘要:1 NIO NEW IO 的简称,新的java I/O标准,jdk1.4纳入,有以下特点: (1)NIO基于block块,以块(硬盘数据块)为单位处理数据,比旧式的io基于流的效率高。 (2)为各个基本类型类型提供缓存支持(buffer),最常用的是byteBuffer,用字节读写数据。 (3)使用
阅读全文
摘要:1 设计模式 (1) 单例模式 保证一个类只能一个对象实现。正常的单例模式分为懒汉式和饿汉式,饿汉式就是把单例声明称static a=new A(),系统第一次调用的时候生成(包括调用该类的其他静态资源也会生成),懒汉式就是系统调用get函数的时候,加个锁判断单例对象是否存在,存在就返回不存在就声明
阅读全文
摘要:1 并发容器 (1)ConcurrentHashMap 把整个hashmap 分成若干个小的hashmap(segment),每个segment自己加锁(用ReentrantLock),put的时候采用while(trylock()),tryLock是底层是使用cas竞争资源,会一直等待锁资源而不会
阅读全文
摘要:1 无锁 (1) cas (compare and swap) 设置值的时候,会比较当前值和当时拿到的值是否相同,如果相同则设值,不同则拿新值重复过程;注意,在设置值的时候,取值+比较+设值 是一条cpu语句,在这个过程中不会有其他线程干扰,是原子操作。从指令层面保证操作可靠。CAS有3个操作数,内
阅读全文
摘要:1 可以手动实现一个最简单的线程池,不考虑性能和等待机制等。public class Worker extends Thread { private LkThreadPool pool; private Runnable target; private boolean isShutDown=fals
阅读全文
摘要:2 同样 如果想要实现能够重入的读写锁,读可重入,写唯一,并且读写互斥,那么需要用两个资源分别给读写的线程竞争, 读的资源可累加,每次线程readlock的时候加一,不设上限;写的线程如上面只可唯一线程获得资源。并且无论读写线程竞争资源之前, 都要检测对方资源是否已经被占用,如果占用也要挂起,这样可
阅读全文
摘要:1锁基础和优化。 (1)对象头mark *对象头的标记,描述对象的hash,锁信息,垃圾回收标记,年龄等。包括指向锁记录的指针,指向monitor的指针,gc标记,偏向锁线程id。这部分数据的长度在32位和64位的虚拟机中分别为32bit和64bit,简称“Mark Word” *对象头信息是与对象
阅读全文
摘要:1 基本概念 同步(synchronous)异步(asynchronous) 并发(concurrency)并行(paralleism) 区别:并发是一个cup分时执行不同部分,并行是多个cpu线程同时执行。 临界区 :公共资源(共享数据)。当两个线程竞争同一资源时,如果对资源的访问顺序敏感,就称存
阅读全文
摘要:1 类装载流程 : 加载,链接,初始化。 (1)加载 装载类的第一阶段,获取类的二进制流,转化为方法区数据结构,并在java堆中生成对应的java.lang.Class对象。 (2)链接 第一步 各种验证 文件格式验证:保证class格式正确。包括是否以0xCAFEBABE开头,版本号是否合理。 元
阅读全文
摘要:1 gc算法 gc的对象是堆空间和永久区的不可触及的对象。 *对象有三个状态 可触及:从根节点可以触及到这个对象;可复活:引用被释放,但是finalize方法中可复活;不可触及:引用释放,finalize不复活。注意,finalize只会在第一次垃圾回收的时候调用一次,以后不会再掉用,而且调用时间不
阅读全文

浙公网安备 33010602011771号