03 2014 档案

摘要:JVM执行Java程序时需要装载各种数据,比如类型信息(Class)、类型实例(Instance)、常量数据(Constant)、本地变量等。不同的数据存放在不同的内存区中,这些数据内存区称作“运行时数据区(Runtime Data Area)”。运行时数据区有这样几个重要区:JVM Stack(简... 阅读全文
posted @ 2014-03-30 20:10 cacard 阅读(7064) 评论(0) 推荐(2) 编辑
摘要:如何判断垃圾对象?垃圾收集的第一步就是先需要算法来标记哪些是垃圾,然后再对垃圾进行处理。引用计数(ReferenceCounting)算法这种方法比较简单直观,FlashPlayer/Python使用该算法,简单高效。核心思路是,给每个对象添加一个被引用计数器,被引用时+1,引用失效-1,等于0时就表示该对象没有被引用,可以被回收。但是,Java/C#并不采用该算法,因为该算法没有解决对象相互引用的问题,即:当两个对象相互引用且不被其它对象引用时,各自的引用计数为1,虽不为0,但仍然是可被回收的垃圾对象。根搜索(GC Roots Tracing)算法基本原理是:GCRoot对象作为起始点(根) 阅读全文
posted @ 2014-03-28 21:29 cacard 阅读(5801) 评论(1) 推荐(2) 编辑
摘要:无锁编程 / lock-free / 非阻塞同步无锁编程,即不使用锁的情况下实现多线程之间的变量同步,也就是在没有线程被阻塞的情况下实现变量的同步,所以也叫非阻塞同步(Non-blocking Synchronization)。实现非阻塞同步的方案称为“无锁编程算法”(Non-blocking al... 阅读全文
posted @ 2014-03-20 15:43 cacard 阅读(21746) 评论(1) 推荐(5) 编辑
摘要:JDK5引入了JMM新规范:JSR-133,引入了happens-before/可见性等概念,对synchronized/volatile/final等关键词进行了语义定义。解决了:final变量在构造器中初始化的线程安全问题以及volatile变量与no-volatile变量之间的重排序问题。为什么需要Memory Model在多线程的场景下,thread1修改了一个变量后,thread2要读取这个变量,其间可能会发生指令执行顺序的问题(因为编译器优化指令、处理器重排指令、写数据缓存未及时更新到主内存)。如何保证thread2要读的变量是想要的thread1修改后的变量呢?Memory Mo 阅读全文
posted @ 2014-03-18 09:52 cacard 阅读(2566) 评论(0) 推荐(1) 编辑
摘要:MQTT -MQ Telemetry Transport轻量级的 machine-to-machine 通信协议。publish/subscribe模式。基于TCP/IP。支持QoS。适合于低带宽、不可靠连接、嵌入式设备、CPU内存资源紧张。是一种比较不错的Android消息推送方案。FacebookMessenger采用了MQTT。MQTT有可能成为物联网的重要协议。消息体MessageTypeCONNECTTCP连接建立完毕后,Client向Server发出一个Request。如果一段时间内接收不到Server的Response,则关闭socket,重新建立一个session连接。如果一个 阅读全文
posted @ 2014-03-15 10:20 cacard 阅读(102594) 评论(1) 推荐(2) 编辑
摘要:工作队列:Working Queue工作队列这个概念与简单的发送/接收消息的区别就是:接收方接收到消息后,可能需要花费更长的时间来处理消息,这个过程就叫一个Work/Task。几个概念分配:多个接收端接收同一个Queue时,如何分配?消息确认:Server端如何确定接收方的Work已经对消息进行了完整的处理?消息持久化:发送方、服务端Queue如何对未处理的消息进行磁盘持久化?Round-robin分配多个接收端接收同一个Queue时,采用了Round-robin分配算法,即轮叫调度——依次分配给各个接收方。消息确认默认开启了消息确认(接收方接收到消息后,立即向服务器发回确认)。消息接收方处理 阅读全文
posted @ 2014-03-14 10:55 cacard 阅读(10516) 评论(0) 推荐(1) 编辑
摘要:简介RabbitMQ是一个Message Broker,核心思想就是接受消息,转发消息。实现的协议:AMQP。术语(Jargon)P,Producing,制造和发送信息的一方。Queue,消息队列。C,Consuming,接收消息的一方。Simple Demo发送方 ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); Connection connection = factory.newConnection(); Channel channel = conn.. 阅读全文
posted @ 2014-03-13 20:09 cacard 阅读(8942) 评论(1) 推荐(0) 编辑
摘要:特点* 各个元素不仅仅按照HashMap的结构存储,而且每个元素包含了before/after指针,通过一个头元素header,形成一个双向循环链表。使用循环链表,保存了元素插入的顺序。* 可设置参数,让每次get()后的元素排在双向链表的最后。Entry类private static class ... 阅读全文
posted @ 2014-03-08 21:55 cacard 阅读(896) 评论(0) 推荐(0) 编辑
摘要:特性* 允许null作为key/value。* 不保证按照插入的顺序输出。使用hash构造的映射一般来讲是无序的。* 非线程安全。* 内部原理与Hashtable类似。源码简要分析public class HashMap{ static final int DEFAULT_INITIAL_C... 阅读全文
posted @ 2014-03-07 21:54 cacard 阅读(417) 评论(0) 推荐(0) 编辑
摘要:Hashtable /HashMap / LinkedHashMap 概述* Hashtable比较早,是线程安全的哈希映射表。内部采用Entry[]数组,每个Entry均可作为链表的头,用来解决冲突(碰撞)。* HashMap与Hashtable基本原理一样,只是HashMap允许null的key... 阅读全文
posted @ 2014-03-06 21:52 cacard 阅读(2999) 评论(0) 推荐(0) 编辑
摘要:Download & Installdownload hadoop fromhttp://hadoop.apache.org/releases.html#Downloaddownload zip file (not rpm)[v 1.1.2 bin]http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-1.1.2/hadoop-1.1.2-bin.tar.gz[v 2.0.5-alpha]http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop 阅读全文
posted @ 2014-03-01 11:08 cacard 阅读(11480) 评论(0) 推荐(0) 编辑