摘要:
来看jdk6中String的substring jdk6中substring确实新创建了一个String对象,但问题在于该对象的char[] value字段仍然是旧String对象的(新瓶装旧酒),设想如果就string很长,新string很短,这就造成了内存泄漏。 一种解决方法 再来看jdk7的s 阅读全文
摘要:
解析调用 解析调用是指对那些“编译器可知,运行期不变”的方法的调用,这些方法在编译期就可以确定,并且在解析阶段转换为直接引用,之后就不会改变了。可以进行解析调用的方法有:构造方法、私有方法、final方法、父类方法,这些方法在运行期都是唯一的,不会改变。 上面测试中,A.fun()的解析并不发生在T 阅读全文
摘要:
下面就来看slf4j是如何找到厂商实现的,即performInitialization是如何初始化的,初始化的逻辑主要就是找到StaticLoggerBinder,所谓找到StaticLoggerBinder就是由jvm类加载器加载StaticLoggerBinder。 这里有一个不太容易接受的地方 阅读全文
摘要:
由于heap中对象的存活时间差异很大,如果每一次都是无差别的进行gc,效率会很差。将heap按照对象大小、存活时间划分出不同的区域,针对不同的区域使用不同的gc算法可以提高效率。 年轻代的对象存活率低可以采用复制算法,老年代的对象或是存活率高的对象,或是大对象,这些对象使用复制算法进行gc成本太高, 阅读全文
摘要:
synchronized 进入、退出同步块时会刷新所有工作内存,使得其他线程对刚退出同步块的线程对共享变量所作的更新可见。通过锁机制,synchronized实现了原子性和有序性,即同一时刻只能有一个线程进入临界区,且保证了下一个线程进入临界区之前上一个线程已经退出临界区。 volatile 同样通 阅读全文
摘要:
类加载 java的类加载过程分为加载、验证、准备、解析、初始化等阶段,加载、验证、准备、初始化的开始顺序是一定的,解析则可能会出现在初始化之后、使用过程中。 加载 类加载的第一个阶段就是加载类字节流,通过加载,jvm运行时数据区的方法区内就会产生该类相应的数据结构,并在heap中创建一个class对 阅读全文
摘要:
activemq的consumer端也有窗口机制,通过prefetchSize就可以设置窗口大小。加入窗口是为了批量获取数据,同时可以设置optimizeAcknowledge来优化确认回复,优化确认一方面可以减轻client负担(不需要频繁的确认消息)、减少通信开销,另一方面由于延迟了确认(默认a 阅读全文
摘要:
broker在接收到producer发送来的Message后(其实接收client发来的命令并不属于broker的职责,broker真正要做的是将处理这些命令,比如将消息路由置对应的destination,而接收client命令的任务是由TransportServer完成的),就需要持久化、抓发消息 阅读全文
摘要:
配置broker时,都会设置connector,connector内部会持有一个TransportServer,TransportServer相当于socketserver,transport相当于socket,connector启动(start)时会引发socketserver的启动(start) 阅读全文
摘要:
json和bson json(JavaScript Object Notation, JS 对象标记)使用人类易读的文本形式标记来对象,其优势体现在易读,劣势在于不易于在json上做操作(CRUD)。bson作为json的二进制编码序列,其不仅仅是简单的使用字符集(如utf-8)编码json,而是使 阅读全文