MongoDB と ConcurrentHashMap Java クラスを使用してキャッシュ サーバーを実装しています。オブジェクトをメモリに置くための利用可能なスペースがある場合、それは置かれます。それ以外の場合、オブジェクトは mongodb データベースに保存されます。ユーザーがメモリ キャッシュのサイズ制限を指定することを許可します (これは明らかにヒープ サイズ制限を超えてはなりません!)。クライアントは、RMI 経由で接続するキャッシュ サービスを使用できます。新しい受信オブジェクトをメモリに配置できるかどうかを確認するには、各オブジェクトのサイズを知る必要があります。インターネットで検索したところ、サイズを取得するためにこのソリューションが得られました。
public long getObjectSize(Object o){
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(o);
oos.close();
return bos.size();
} catch (Exception e) {
return Long.MAX_VALUE;
}
}
このソリューションは非常にうまく機能します。しかし、メモリの使用に関しては、私の問題は解決しません。:( 多くのクライアントが同時にオブジェクトのサイズを確認している場合、これによりスタック オーバーフローが発生しますよね?まあ...何人かの人々は言うことができます:特定のオブジェクトのサイズを取得してメモリに保存しないのはなぜか、別のオブジェクトがオブジェクトのサイズをチェックするメモリを入れる必要がありますか? オブジェクトのサイズが可変であるため、これは不可能です。:(
誰かが私を助けることができますか?RMI通信からソケットを取得しようと思ったのですが、やり方がわかりません...