Netty NIO中最重要的两个方法write和flush,write是把数据写入到OutboundBuffer(不真正发送数据),flush是真正的发送数据。Netty还提供另外一个方法writeAndFlush就是将write和flush方法合起来。
TCP-IP详解
network-tcp/ip
log4j配置详解
Apache log4j是一个基于Java的日志记录工具。它最初是由CekiGülcü写的,现在是Apache软件基金会的一个项目, log4j的是主流Java日志框架之一。此后Gülcü设计了SLF4J和Logback,意图成为log4j的继任者。
log4j团队创建了log4j2.0新版本,log4j 2.0改进了很多logback中可用问题,和架构问题。
ZooKeeper分布式锁
ZooKeeper排它锁
排它锁(Exclusive Lock),又称为写锁和独占锁。在Java中排它锁可以用synchronized机制和JDK5提供的ReentrantLock。ZooKeeper中直接的API的实现排它锁,而是通过ZooKeeper的节点来实现锁。首先创建一个/Exclusive_Lock节点,然后创建一个其子节点 /Exclusive_Lock/lock,为临时(EPHEMERAL)节点。如下图
Zookeeper介绍
What is ZooKeeper?
ZooKeeper: A Distributed Coordination Service for Distributed Applications
ZooKeeper为分布式应用提供分布式协调服务,是Google的Chubby的开源实现。Zookeeper是一个高性能的分布式数据一致性解决方案,它并没直接采用Paxos算法,而是采用了一种被称ZAB(Zookeeper Atomic Broadcast)的一致性协议。
Java类加载器详解
Java三种类型的类加载器
- 我们首先看一下JVM预定义的三种类型类加载器,当一个 JVM 启动的时候,Java 缺省开始使用如下三种类型类装入器:
- 启动类加载器(Bootstrap Class Loader):引导类装入器是用本地代码实现的类装入器,它负责将
/lib 下面的类库加载到内存中。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。 - 标准扩展类加载器(Extensions Class Loader):扩展类加载器是由 Sun 的 ExtClassLoader (sun.misc.Launcher$ExtClassLoader) 实现的。它负责将 < Java_Runtime_Home >/lib/ext 或者由系统变量 java.ext.dir 指定位置中的类库加载到内存中。开发者可以直接使用标准扩展类加载器。
- 系统类加载器(System Class Loader ):系统类加载器是由 Sun 的 AppClassLoader (sun.misc.Launcher$AppClassLoader)实现的。它负责将系统类路径(classpath)中指定的类库加载到内存中。开发者可以直接使用系统类加载器。
Hexo 博客优化(NexT主题)
用ASM实现简单的Proxy(未完待续)
CGLib和JDK Dynamic代理在Java框架开发中广泛的应用,两者都是用字节码技术修改了修改了原始class文件,生成新的代理类。JDK Dynamic基于接口代理,代理类实现接口同时继承于java.lang.reflect.Proxy
SourceCode Crack——ASM
前言
- 官方介绍:ASM is an all purpose Java bytecode manipulation and analysis framework. It can be used to modify existing classes or dynamically generate classes, directly in binary form
- ASM是一个多用途的Java字节码操作和分析框架。它可以被用来修改现有类或动态生成的类,直接以二进制形式
- ASM 应该是 Assembly缩写(官方没有缩写介绍,个人理解)
JVM垃圾收集算法
JVM垃圾收集
1. 判断对象是否存活
- 引用计数算法
对象添加一个引用计数器,每个地方引用它,计数器值加+1;当引用失效,计算器值减1;任何时刻计数器为0的对象不可能被使用。引用计数算法实现简单,高效。
缺点:引用计数算法,很难解决相互引用的问题。1
2objA.instance = B;
objB.instance = C;