2013年11月读书笔记

Netty 4 at Twitter: Reduced GC Overhead

https://blog.twitter.com/2013/netty-4-at-twitter-reduced-gc-overhead

主要讲了netty4在减少gc压力和内存带宽消耗上的改进:
新消息收到或者发送消息时netty3会创建一个buffer,创建字节数组new byte[capacity],并用0来填充数组,这样会造成gc压力和内存带宽消耗,nettry4中为不同的事件定义不同的处理方法,减少事件对象创建。
netty4中引入新接口ByteBufAllocator,它提供一个buffer池(类似于jemalloc ),实现buddy memory allocation and slab allocation.

Buddy memory allocation

https://en.wikipedia.org/wiki/Buddy_memory_allocation

buddy memory allocation是一种内存分配算法,它把内存划分为不同的分区,尽量满足不同的内存请求。最常见的是binary buddies,每一个内存block有一个order,order从0到某个值,在不同的order的block按照2order 的大小比例 ,所以满足 orderA=orderB-1 ,block B的大小为blockA的两倍。
首先需要确定最小block的大小(最小的可被分配的内存块)。最小快太小,操作系统会消耗过多内存和计算资源去跟踪内存块分配和回收。最小快比较大,又造成内存浪费。最小block的大小作为order0 block大小。

Slab allocation

https://en.wikipedia.org/wiki/Slab_allocation

slab allocation是一种内存管理机制,用于有效的内存分配,并尽量消除分配和回收内存过程中造成的碎片。它按照预先规定的大小,将分配的内存分割成特定长度的内存块,再把尺寸相同的内存块分成组,这些内存块不会释放,可以重复利用。

Scalable memory allocation using jemalloc

https://www.facebook.com/notes/facebook-engineering/scalable-memory-allocation-using-jemalloc/480222803919

TCMalloc优化MySQL、Nginx、Redis内存管理

更好的内存管理-jemalloc

Heartbeat In Persistent Connection

http://cheney-mydream.iteye.com/blog/1497152

http://bbs.csdn.net/topics/360072641

TCP连接建立过后,如果没有心跳,时间长了就会产生“僵尸连接”,就是通信的双方其实连接已经断了,但由于TCP并不定时检测连接是否中断,而通信的双方又相互没有send操作,导致该连接在通信的双方的tcp上一直有效,占用操作系统资源。这时TCP连接是不可使用的,但是对于应用层并不知道,心跳包主要也就是用于长连接的保活和断线处理。

在rabbitmq client中,为了保证连接可用使用HeartbeatSender来定时发送心跳包。同样的,在druid中,可以配置在连接空闲达到阀值时,执行简单的sql来检测连接是否有效。

Nashorn(Naz-horn)

https://oracleus.activeevents.com/2013/connect/sessiondetail.ww?session_id=7835

介绍了noshorn一些用法
Shell Scripting部分介绍了使用Noshorn来编写shell 脚本,以后可以摆脱bash了。其他包括Noshorn中java互操性、线程、调试等。

https://oracleus.activeevents.com/2013/connect/sessionDetail.ww?SESSION_ID=5793

介绍了Noshorn是什么:

  1. JVM上的javascript引擎
  2. 100% java实现
  3. 终极invokedynamic用户
  4. 100%编译成字节码执行
  5. 100% 兼容ECMASCRIPT5.1

没有浏览器API(HTML5 canvas、HTML5 canvas、WebWorkers WebSockets、WebGL)

https://oracleus.activeevents.com/2013/connect/sessionDetail.ww?SESSION_ID=2585

介绍了JVM上的内嵌脚本语言,JSR-223 (javax.script规范),其中提到了使用script语言结合动态代理,并实时检测脚本文件变动实现live reloading。

给攻城狮一个小小的鼓励!