A)、バッファ
作用:缓解程序上下层之间的性能差异。
1)、当上层组件的性能优于下层组件时加入缓冲机制可以减少上层组件对下
层组件的等待时间。
2)、上层组件不需要等待下层组件接收全部数据,即可返回操作,加快了上
层组件的处理速度。
缓冲的应用:
JDK的I/O组件提供了缓冲功能。
例:当对文件进行写操作时需要从内存中读取数据写入到硬盘,此时,文件从
内存中的读取速度比写入硬盘的速度快,此时就出现了上层组件的性能优
于下层组件的情况,此时可以加入缓冲机制BufferInputStream()先将数据
写入缓冲区,再将数据写道硬盘中。
B)キャッシュ
定义:是一块为提高系统性能的内存空间。
作用:暂存数据处理结果,并提供下次访问使用。
应用场景:
数据处理或数据获取可能会非常耗时,当数据的请求量很大时,频繁的数据处
理会耗尽cpu资源。
简单缓存的实现:直接使用HashMap
弊端:
1)、不知道应该何时清理无效数据。
2)、如何防止数据过多导致内存溢出。
基于java的缓存框架:
- EHCacheなど:デフォルトのデータ・キャッシング・ソリューションを休止。
- OSCacheの:設計によりOpenSymphonyのは、任意のオブジェクトもキャッシュキャッシュできる
JSPページの、またはHTTPリクエストを。 JBossCacheのは:JBossが開発され、クラスタ間のJBossフレームバッファのデータ共有のために使用することができます。
Cacheアプリケーション:それは、渡されたキーのパラメータに基づいて構築することができ、その頻繁に呼び出しのパフォーマンスを向上させるために、キャッシュ頻繁に使用する機能や重い荷物を追加することをお勧めします。
ダイナミックプロキシキャッシング・ソリューション:
1).在方法中加入缓存的弊端:缓存组件和业务层代码紧密耦合,依赖性强。
2)利益を達成するために、動的キャッシュプロキシを使用:ビジネス層では、キャッシュの動作に注意を払うことなく、コードが完全に独立し、孤立している、新しい関数法に、キャッシュを追加し、元のメソッドの実装には影響しません。
スリー)、オブジェクトの再利用プール
プーリング:クラスが頻繁に使用される要求された場合は、このクラスのインスタンスは直接プールから、使用中に、タンクに貯蔵されます。
プールには、配列、リンクリストまたは任意のコレクションクラスすることができます。
アプリケーションのプーリング:
1)、スレッドプール:
2)、データベース接続プール
データ接続は、広く電池モジュールを使用しています。
1)、C3P0接続プール2)、ProXool接続プール
C3P0は、接続プールを達成します:
接続CON = pool.getConnection()
詐欺クラスタイプ:com.mchange.V2.c3p0.impl.NewProxyConnection
1)、データ接続プール・オブジェクトを介してのgetConnectionは、データベース接続、このとき得られた接続オブジェクトNewProxyConnectionプロキシオブジェクトをオブジェクト呼び出します。
2)、取得したクラスオブジェクトを接続する内部接続で、データベース内の実際のオブジェクトに接続されています
Object re = f.get()
re的类类型:com.msql.jdbc.JDBC4Connection
Field f = con.getClass().getDeclaredFiled("inner") //通过反射获取内部类对象
Object re = f.get() //获取实际的数据库连接
結論:あなたはcon.close()を呼び出し、データベースを閉じて、本当に接続されていませんが、ユーザーは接続プールからのgetConnection秒の時間を呼び出すときに、接続オブジェクトを取得するためにデータベース接続を保存するためにプールにデータベース接続。
四)、Jakarta Commonsのプール対象電池モジュール
アパッチによって提供さJakarta Commonsの投票対象の電池モジュール。
これは、2つのインターフェースを定義しています。
ObjectPool(オブジェクトプーリングインタフェース)
public interface ObjectPool{
//从对象池中取一个对象
T boorowObject();
//将对象返回给对象池
void returnObject(T boorowed);
}
PoolableObjectFactory:オブジェクトプール管理機能
public interface PoolableObjectFactory{
//创建对象,若对象池没有对象,在borrowObject()时会自动调用
T MakeObject();
//在创建对象前使用,激活对象
void activateObject(T Object);
//在对象返回对象池时使用
void passivateObject(T Object);
//判断对象是否可用
void validateObject(T Object);
//pool.close()对象从对象池中销毁使用
void destoryObject(T Object);
}
ビルトインは、3つのオブジェクト・プールを定義します
1)、StackObjectPool
使用java.util.Stack来保存对象,可以指定初始化大小,当空间不够时,可以自
动增长,无可用对象时,可以自动创建新对象。
2)、GenericObjectPool
通用对象池,可以设定对象池的容量,可设定无可用对象时,对象池的表现行
为(等待或创建新实例),可以设置对象有效性检查
3)、softReferenceObjectPool
使用ArrayList保存对象,不保存对象的强引用,只保存对象的弱引用,对对象
数量没有限制,当没有对象时会自动创建对象,当内存紧张时,Jvm自动回收
具有弱引用对象。