`
Jen
  • 浏览: 56644 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
文章列表
博客迁移至http://jenwang.org
Metamorphosis是一个高性能、高可用、可扩展的分布式消息中间件,类似于LinkedIn的Kafka,具有消息存储顺序写、吞吐量大和支持本地和XA事务等特性,适用于大吞吐量、顺序消息、广播和日志数据传输等场景,在淘宝和支付宝有着广泛的应用,现已开源.http://metaq.taobao.org/
  这几天使用MappedByteBuffer对系统进行了实现,在压测过程中发现启动多个group订阅时服务端会发生jvm crash ,排查后找到了原因,记录一下。   部分信息如下: # # A fatal error has been detected by the Java Runtime Environment: # #  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x01b8d4d7, pid=10236, tid=8452 # # JRE version: 6.0_18-b02 # Java VM: Java ...
关于BeanUtils拷贝null属性的问题 jen wang          帮同事查看物流发货问题时,发现BeanUtils在copy null属性时会有一些问题。现在总结一下现象、原因和解决方法。 问题现象        1.当源对象(a)中存在一个java.sql.Date类型 ...
接上篇,居然非得分两篇   3 增强MRUnit          下面介绍为MRUnit框架增加了支持MultipleOutputs、从文件加载数据集和自动装配等几个特性,使它更加便于使用。 如何支持MultipleOutputs          然而很多场景下我们需要使用MultipleOutputs作为reduce的多文件输出,MRUnit缺少支持。分析源码后为MRUnit增强扩展了两个Driver:ReduceMultipleOutputsDriver和MapReduceMultipleOutputDriver来支持MultipleOutputs。   ...
  hadoop单元测试方法--使用和增强MRUnit 1前言          hadoop的mapreduce提交到集群环境中出问题的定位是比较麻烦的,有时需要一遍遍的修改代码和打出日志来排查一个很小的问题,如果数据量大的话调试起来相当耗时间。因此有必要使用良好的单元测试手段来尽早的消除明显的bug(当然仅有单元测试是不够的,毕竟跟集群的运行环境还是不一样的)。        然而做mapreduce的单元测试会有一些障碍,比如Map和Reduce一些参数对象是在运行时由hadoop框架传入的,例如OutputCollector、Reporter、
  JUC代码浅析[6]——基于AQS的CyclicBarrier        CyclicBarrier是一种同步机制允许一组线程相互等待,等到所有线程都到达一个屏障点才退出await方法,它没有直接实现AQS而是借助ReentrantLock来实现的同步机制。它是可循环使用的,而CountDownLatch是一次性的,另外它体现的语义也跟CountDownLatch不同,CountDownLatch减少计数到达条件采用的是release方式,而CyclicBarrier走向屏障点(await)采用的是Acquire方式,Acquire是会阻塞的,这也实现了CyclicBarri ...
JUC代码浅析[5]——基于AQS的CountDownLatch        CountDownLatch是一种使线程等待一组其他线程操作完成再开始的同步方式,初始化时设置一个计数值,每完成一次操作后countDown()对计数值减操作,线程等待await()直到计数值为0。        为了说明使用场景拷贝了代码注释中的例子, class Driver { // ...    void main() throws InterruptedException {      CountDownLatch startSignal = new CountDownLatch(1 ...
JUC代码浅析[4]——基于AQS的信号量Semaphore        Semaphore是基于AQS共享模式实现的计数信号量,它维护一个资源一个时期内最多访问者个数。超过限制数量的线程被阻塞。使用state表示许可的个数。acquire操作减少计数,release增加计数,许可计数为0时就不允许新的访问进入。   获取许可,     public void acquire()
JUC 代码浅析 [3] ——基于 AQS 的锁 ReentrantReadWriteLock        ReentrantReadWriteLock 也是基于 AQS 实现的锁,它的特点是一个资源能够被多个读线程访问,或者被一个写线程访问,读和写是互斥的,可以同时有多个读但只能有一个写,大量读操作的场景下性能较好。 ReentrantReadWriteLock 并没有实现 Lock 接口,而是内部实现了 ReadLock 和 WriteLock 分别针对读和写操作。看起来像两个锁,但其实这两个锁只是进行了一层适配,它 ...
JUC代码浅析[2]——基于AQS的锁ReentrantLock          ReentrantLock是使用比较普遍的一个可重入锁,它是互斥的,一个锁只能被一个线程占有。它的方法基本都是委托给继承AQS的Sync实现的。其中Sync有两种实现,公平和非公平。Sync使用state(通过AQS暴露的getState和setState方法)保存线程的获取次数。总的策略为state次数为0时可以获得锁。大于0
  JUC代码浅析[1]——同步器AQS        AQS(AbstractQueuedSynchronizer)是一个提供实现各种锁和同步器的基本框架,它实现了调度逻辑,留出具体的进入和释放规则给子类实现。JUC中基于AQS实现的有ReentrantLock,Semaphore,CountDownLatch, ReetrantRead WriteLock,FutureTask等。代码非常复杂很难描述清楚每个细节,可能还有一些理解偏差的地方。总的来说底层实现的要点有Unsafe.compareAndSwapXXX(Object o,long offset,int expect ...
07年写的文章,这个博客开了很久了一直没写,把旧博客上的这篇移到这里。从现在开始用这个博客      昨天早上朋友传给我一张图片,曾被此君的一些恶作剧图片吓倒过,这次刚开始也不敢打开。这张图片在winxp下缩略图显示与打开后的内容不一样,让几个同学看了一下,他们都说看过了。就是前段时间网上流传的‘一张令所有人吃惊的图片’,是一张椅子的图片,但是,如果你的系统是XP,把它下载后保存到任意一个文件夹中,打开文件夹,用缩略图的方式查看,会看到图片的缩略图是一个机器女人坐在地上。 很惊奇,但直觉的反映就是这张图片可能被存储了别的信息或修改了头文件信息。       经过一番研究之后,知道了 ...
Global site tag (gtag.js) - Google Analytics