- 博客(21)
- 资源 (1)
- 收藏
- 关注
转载 ActiveMQ讯息传送机制以及ACK机制
ActiveMQ消息传送机制以及ACK机制详解 AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的。 一. ActiveMQ消息传送机制 Producer客户端使用来发送消息的, Consumer客户端用来消费消息;它们的协同中心就是Ac
2016-10-14 15:55:58
721
原创 Netty ByteBuf原理及其源码分析
缓冲区介绍 当我们进行数据传输的时候,往往需要缓冲区。java NIO 中自带的提供的就是java.nio.Buffer 但是由于java自带的过于复杂,而且自身也有一定的缺陷(定长,一个标识位position等)。Netty便提供的自己的缓冲ByteBuf Nio ByteBuffer 和 Netty ByteBuf 对比
2016-07-15 14:00:16
4208
原创 netty 私有协议开发
以下代码仅仅是demo。不适用于正式环境消息的定义public class NettyMessage { private Header header; private String data; public Header getHeader() { return header; } public void setHeade
2016-07-13 17:01:33
2985
原创 虚拟机垃圾收集算法
1.标记-清除算法最基础的收集算法是 “标记-清除”。如同名字一样。算法分为标记和清除2个阶段。首先标记出所有需要回收的对象。标记完成后统一回收所有被标记的对象。但是此种算法有2个不足之处: 1) 效率问题。2个过程效率都不高2)空间碎片问题。标记清除之后会产生大量的空间碎片。这样后期的程序中。可能无法为大对象分配连续的空间,而导致另一次GC操作
2016-06-07 14:37:07
1348
原创 虚拟机对象是否还有引用
问题如何判断对象已经死亡?引用计数算法当有一个地方引用该对象,就为对象的引用计数器加1,当引用失效的时候就减1。当计数器为0的时候代表当前对象无引用。虽然引用计数算法的效率很好,但是java主流的虚拟机并没有选择它来管理内存。其中最主要的就是它难以解决相互引用带来的问题。添加启动参数:-verbose:gc -XX:+PrintGCTimeStamps -X
2016-06-07 11:51:14
1106
原创 java对象头
在hotspot虚拟机中,对象在内存的分布分为3个部分,对象头,实例数据,和对齐填充。本文主要讲解对象头。hotspot虚拟机的对象头主要分为2个部分。第一部分 主要存储对象自身的运行数据。比如:哈希码、GC分代年龄、锁状态标志、线程持久的锁、偏向线程的ID、偏向时间戳等。这部分数据的长度在32位和64为虚拟机上分别对象32bit和64bit。官方称之为“m
2016-06-07 10:52:57
4864
原创 java虚拟机内存分布
概括java虚拟机在运行的时候,会把内存划分成若干个内存块、这些区域各自有各自的作用用途 。 1.程序计数器程序计数器是一块比较小的内存区域,它可以看做是当前线程所执行的字节码的行号指示器。字节码指示器工作的时候就是通过这个指令来获取下一条需要执行的指令。(分支,循环,判断、异常等都需要这个计数器来完成)2.
2016-06-01 11:11:09
1226
原创 duubo入门
什么是dubboDubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。其核心部分包含:远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
2016-05-31 17:00:51
2013
原创 java7 fork-join
什么是Fork/Join框架Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架Fork/Join使用两个类来完成以上两件事情。①ForkJoinTask:我们要使用ForkJoin框架,必须首先创建一个ForkJoin任务。它提供在任务中执行fork()和join()操作的机制。通常情
2016-05-27 14:14:23
1206
原创 ConcurrentHashMap源码分析
什么要使用ConcurrentHashMap在并发编程中使用HashMap可能导致程序死循环。而使用线程安全的HashTable效率又非常低下,基于以上两个原因,便有了ConcurrentHashMap的登场机会。ConcurrentHashMap是线程安全且高效的HashMapConcurrentHashMap的锁分段技术可有效提升并发访问率HashTable容器在竞争激
2016-05-27 10:48:47
1009
原创 ReentrantLock 和 Condition的使用
ReentrantLock ReentrantLock可以等同于synchronized使用。ReentrantLock 类实现了Lock ,它拥有与synchronized 相同的并发性和内存语义,但是添加了类似锁投票、定时锁等候和可中断锁等候的一些特性。此外,它还提供了在激烈争用情况下更佳的性能。(换句话说,当许多线程都想访问共享资源时,JVM 可以花更少的时候来调度线程,把更
2016-05-27 10:06:46
2658
原创 cyclicBarrier
import java.io.IOException;import java.util.Random;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.ExecutorService;import
2016-05-26 17:34:00
911
原创 CountDownLatch
主要方法 public CountDownLatch(int count); public void countDown(); public void await() throws InterruptedExceptionimport java.util.concurrent.CountDownLatch;import java.util.concurrent.Exe
2016-05-26 17:24:46
874
原创 双重检查锁定与延迟初始化
在Java程序中,有时候可能需要推迟一些高开销的对象初始化操作,并且只有在使用这些对象时才进行初始化。此时,程序员可能会采用延迟初始化。但要正确实现线程安全的延迟初始化需要一些技巧,否则很容易出现问题。比如,下面是非线程安全的延迟初始化对象的示例代码。
2016-05-26 11:37:50
977
原创 java多线程之指令重排序
重排序 在执行程序时,为了提高性能,编译器和处理器常常会对指令做重排序。重排序分3种类型。1)编译器优化的重排序。编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。2)指令级并行的重排序。现代处理器采用了指令级并行技术(Instruction-Level Parallelism,ILP)来将多条指令重叠执行。如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行
2016-05-25 11:21:56
1859
原创 java内存模型
简介在并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。 在共享内存的并发模型里,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过发送消
2016-05-25 11:12:43
1006
原创 多线程 happens-before规则
简介 Java使用新的JSR-133内存模型,JSR-133使用happens-before的概念来阐述操作之间的内存可见性。在JMM中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须要存在happens-before关系。这里提到的两个操作既可以是在一个线程之内,也可以是在不同线程之间规则 1、程序顺序规则:在一个单独的线程中,按照程序
2016-05-25 10:55:17
3553
原创 NIO buffer
Buffer的capacity,position和limit为了理解Buffer的工作原理,需要熟悉它的三个属性:capacitypositionlimitposition和limit的含义取决于Buffer处在读模式还是写模式。不管Buffer处在什么模式,capacity的含义总是一样的。capacity作为一个内存块,Buffer有一个固定的大小值,也叫“
2016-05-24 16:31:49
878
原创 synchronize的实现原理(偏向锁)
1 介绍 当一个线程试图访问同步的代码时,会首先尝试获取锁。执行完毕或者抛出异常的时候会主动释放锁。否则会一直阻塞着。 1.1 实现原理 从JVM规范中可以看到synchronize的实现主要是基于monitor对象来实现的。monitorenter是在编译后插入同步代码开始的位置,而monitorexit是在代码的结束处和异常处。任何一个对象都有一个monitor
2016-05-24 11:31:49
3306
原创 fastdfs安装
介绍fastdfs之前,有必要说下libevent. libevent libevent 是一个事件网络驱动。高性能,支持多种网络IO多路复用技术(select、poll、epoll等)。而fastdfs内部网络处理内部连接就需要用到它 fastd
2015-09-02 10:49:00
809
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人