2012-04-02 7 views
4

自分でメモリ管理を行うことはできますか?例えばGCの対象にならないように、ヒープ領域外にメモリのチャンクを割り当てます。そして、私たち自身がこのメモリチャンクからオブジェクトの割り当て/解放を処理します。java - 独自のメモリ管理を行うことはできますか?

Jmalloc/EHcacheのようなフレームワークを指摘する人もいます。実際に私はもっと彼らが実際にそれをする方法を理解したい。

私はいくつかの直接的なアプローチ、または間接的なアプローチ(例えば、最初にJavaオブジェクトを直列化する)でうまくいきます。

+2

なぜこれをやりたいですか?ちょっと興味があるんだけど。 –

+0

[Unsafe](http://www.docjar.com/docs/api/sun/misc/Unsafe.html)クラスは、おそらく奇妙なことをするのに役立ちます... – assylias

+0

も参照してください:http://stackoverflow.com/questions/5574241 /面白い - 日々の雑多な - 安全 - – assylias

答えて

5

Javaオブジェクトを外部メモリの場所に割り当てることはできませんが、メモリをマップすることができます。ネイティブライブラリで直接ByteBufferに割り当てられ、Javaコードから使用されます。

2

Javaオブジェクトを意味する場合は、いいえ、これは標準のVMでは不可能です。実験したい場合はいつでもVMを変更することができますが(Jikes RVMはこの目的のために作られました)、結果は実際にはJavaにはなりません。

Java以外のデータ構造のメモリ割り当てに関しては、ネイティブライブラリによって定期的に実行されている可能性があり、Javaのサポートもあります(その他の回答に記載されています)。非常に簡単に自己破壊することができます。

+0

Java以外のデータ構造の割り当てに関する詳細を教えてください。私はオブジェクトを直列化/バイトバッファー形式に変換するのは大丈夫です。そのためにいくつかのJavaソリューションが使えますか? – ManojGumber

+0

@ManojGumber他の2つの答えには、これに関するヒントが含まれています:直接ByteBuffersを使うことは1つの方法であるか、jmallocやBigMemoryのような高レベルライブラリを使うことができます。しかし、GCが主要なボトルネックである場合は、実際には本番環境でのみ使用してください。 – biziclop

3

あなたは、たとえば、ヒープメモリアプローチオフjmalloc

を ルックをを使用することができ、これは、私はこの種のものを行うライブラリを持ってもDifference between on and off the heap

+0

私は、たとえばjmallocやEHCacheのようなフレームワークがどうやってそれをやっているのか、さらに理解したいと思っています。 – ManojGumber

+0

@MonojGumber:それらは、Javaで書かれていない可能性が高いネイティブコードです。次に、ライブラリはJavaインタフェースを提供します。 –

+0

jmallocプロジェクトページで、シリアライゼーションを使用していることを読み取ることができます。大きなオブジェクトを格納するのはいいアイデアですが、パフォーマンスにはあまり適していません。 – Neet

3

便利リンクです。書き換え可能なオブジェクトまたはキューに入れられたイベントに使用できる抜粋を作成します。オブジェクトの開始位置と終了位置を追跡します。欠点は、1日または1週間に1回、すべてのオブジェクトを循環させることをライブラリが前提としていることです。即ち、そのようなクリーンアップはない。プラス面では、非常に効率的で、イベント駆動型の方法で使用でき、永続化され、プロセス間で共有することができます。数MBのヒープを使用しながら、数百GBのデータを格納することができます。

https://github.com/peter-lawrey/Java-Chronicle

ところで:それはたByteBufferをサポートしたり、余分なパフォーマンスのために安全でないを使用。

+0

それは本当に面白そうです....私はこのapiを経由します – ManojGumber

+0

あなたがそれを使用しない場合でも、それはあなたにいくつかのアイデアを与えるかもしれません。 –

関連する問題