摘要: 对象 Java虚拟机采用自动的内存管理和自适应的优化策略。但了解java虚拟机的运行机制和优化策略,写出适合java虚拟机管理的程序对性能提升是有意义的。 逃逸分析:对象的作用范围只在本线程范围,如方法(包括静态方法)中new 对象,这个对象是不可能被其它线程共享。可以直接在栈上分配内存。栈上数据在出栈后会释放内存,不需要GC回收。 大对象:虚拟机栈容量有限,大的对象会直接在堆上分配。堆内存回收频... 阅读全文
posted @ 2017-07-08 20:19 jiumao 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 将博客搬至CSDN 阅读全文
posted @ 2017-07-08 19:47 jiumao 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 并发控制 CyclicBarrier CountDownLatch //模拟程序任务 场景一 测试程序 场景二 Semaphore Semaphore为并发包中提供用于控制某资源同时可以被几个线程访问的类 主要方法: void acquire() 从信号量获取一个许可,如果无可用许可前 将一直阻塞等待... 阅读全文
posted @ 2017-07-08 19:05 jiumao 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 线程池 接口Executor 该接口只有一个方法,JDK解释如下 执行已提交的Runnable 任务的对象。此接口提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节、调度等)分离开来的方法。 不过,Executor 接口并没有严格地要求执行是异步的。在最简单的情况下,执行程序可以在调用者的线程中立即运行已提交的任务: 更常见的是,任务是在某个不... 阅读全文
posted @ 2017-07-08 18:22 jiumao 阅读(598) 评论(0) 推荐(0) 编辑
摘要: 队列(Queue) Queue: 先入先出(FIFO)的数据结构。 offer,add区别: 一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。 这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出 一个 unchecked 异常,而只是得到由 offer() 返回的 false。 poll,remove区别: remove() 和 p... 阅读全文
posted @ 2017-07-08 17:43 jiumao 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 并发类库 在关注并发前,我们需要了解一些相关概念。 线程与进程 运行在系统上的每个程序都是一个进程。一个进程可包含多个线程。进程和线程都表示一个逻辑控制流,即一种计算过程。进程独立占用管理物理资源,线程共享同一个进程中的物理资源和数据。可以采用多进程来实现程序的并发。CPU资源是固定的,CPU通过多线程的切换实现并发。即线程轮流执行一个时间片,实现多个任务同时执行。 多线程使用要考虑用户交互与计... 阅读全文
posted @ 2017-07-08 17:40 jiumao 阅读(652) 评论(0) 推荐(0) 编辑
摘要: ReentrantLock重入锁 ReentrantLock是Java并发包中互斥锁,它有公平锁和非公平锁两种实现方式, 重入的意思就是,如果已经获得了锁,如果执行期间还需要获得这个锁的话,会直接获得所,不会被阻塞,获得锁的次数加1;每执行一次unlock,持有锁的次数减1,当为0时释放锁。这点,Synchronized 具有同样语义。 ... 阅读全文
posted @ 2017-07-08 17:01 jiumao 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 应该将子类定义为非公共内部帮助器类,一般并发包类用内部类Sync sync来继承并实现。为实现依赖于先进先出 (FIFO) 等待队列的阻塞锁和相关同步器(信号量、事件,等等)提供一个框架。此类的设计目标是成为依靠单个原子 int 值来表示状态的大多数同步器的一个有用基础。子类必须定义重写此状态的受保护方法,并定义哪种状态对于此对象意味着被获取或被释放。假定这些条件之后,此类中的其他方法就可以实现所... 阅读全文
posted @ 2017-07-08 16:36 jiumao 阅读(167) 评论(0) 推荐(0) 编辑
摘要: atomic 原子(atomic)本意是"不能被进一步分割的最小粒子",而原子操作(atomic operation)意为"不可被中断的一个或一系列操作"。在多处理器上实现原子操作就变得有点复杂。让我们一起来聊一聊在Intel处理器和Java里是如何实现原子操作的。 1.术语定义 在了解原子操作的实现原理前,先要了解一下相关的术语,如表2-7所示。 表2-7CPU术语定义 ... 阅读全文
posted @ 2017-07-08 14:57 jiumao 阅读(391) 评论(0) 推荐(0) 编辑
摘要: Synchronized 先来看下利用synchronized实现同步的基础:Java中的每一个对象都可以作为锁。具体表现 为以下3种形式。 ·对于普通同步方法,锁是当前实例对象。 ·对于静态同步方法,锁是当前类的Class对象。 ·对于同步方法块,锁是Synchonized括号里配置的对象。 synrhronized关键字简洁、清晰、语义明确,因此即使有了Lock... 阅读全文
posted @ 2017-07-08 14:34 jiumao 阅读(121) 评论(0) 推荐(0) 编辑