Flink源码学习-准备工作
版本规范
AOP标准:aopalliance
AOP标准:aopalliance
AOP Alliance 项目是许多对Aop和java有浓厚兴趣的软件开发人员联合成立的开源项目,旨在确定Aop的标准。面向切面编程是设计和开发应用程序的一个好方案,AOP 提供了一种通用方法来构建关注点(横切关注点),并将它们灵活地作为模块插入应用。但是,也带来了问题: 不同的AOP实现并不能适配所有环境。
大多数人不相信完美系统,我们认为一个系统总是能处理给定的一个问题和环境(不需要适配其他)。现在已经有了很多的AOP实现或AOP相关的技术,例如,通用代理,拦截器或字节码翻译工具。具体如下:
- AspectJ: 面向切面的源码级和字节码级别的织入器。
- AspectWerkz: 一个面向切面框架(字节码动态织入,支持XML配置)。
- BCEL: 一个字节码翻译器
- JAC: 一个面向切面框架(字节码动态织入,可配置切面)
- Javassist: 字节码翻译器,有高级API。
- JBoss-AOP: 拦截和基于元数据的AOP框架(支持独立运行和在JBoss应用服务器种运行)
- JMangler: 一个字节码翻译器,支持兼容翻译
- Nanning: 一个面向切面织入器框架
- Prose: 一个面向切面动态字节码织入框架
对我们而言,这些实现没有好与坏的区别,都适合于某些问题或环境。AOP Alliance的目的不是提出新的AOP模型,也不是提供一个更好的AOP实现来解决所有场景的问题。其目的在于提炼所有AOP实现的共同核心能力:
- 避免重复造轮子,尽量重用
- 简化某个环境下现有AOP组件的适配
- 简化开发工具集成AOP能力的工作
shell 脚本速查
Java8 lambda 底层实现原理
java 8 lambda 底层实现原理
之前有听说过 java 8 的 lambda 实现不再是java 1.5的匿名内部类语法糖。今天刚好有时间看看:
1 | public class App { |
时钟回拨
从apache-common-pool看如何写一个通用池
从apache-common-pool看如何写一个通用池
对象的创建和销毁在一定程度上会消耗系统的资源,虽然jvm的性能在近几年已经得到了很大的提高,对于多数对象来说,没有必要利用对象池技术来进行对象的创建和管理。但是对于有些对象来说,其创建的代价还是比较昂贵的,比如线程、tcp连接、数据库连接等对象。对于那些创建耗时较长,或者资源占用较多的对象,比如网络连接,线程之类的资源,通常使用池化来管理这些对象,从而达到提高性能的目的。
apache-common-pool提供了一个通用的对象池技术的实现。可以很方便的基于它来实现自己的对象池。比如DBCP和Jedis他们的内部对象池的实现就是依赖于apache-common-pool(本文分析的是apache common pool2)。