Java の手動メモリ管理手法には次のものがあります。 参照カウント: オブジェクトへの参照数を追跡し、参照カウントが 0 に達するとオブジェクト メモリを解放します。弱参照: ガベージ コレクターがオブジェクトを再利用するときに、オブジェクトのリサイクルを妨げない特別な参照型。強参照: オブジェクトが不要になった場合でも、そのオブジェクトがガベージ コレクションされないようにします。
#Java における手動メモリ管理
はじめに
Java は自動ゴミですコレクション言語では通常、手動のメモリ管理は必要ありません。ただし、場合によっては、メモリを手動で管理するとパフォーマンスが向上したり、メモリ使用量の制御が向上したりすることがあります。参照カウント
参照カウントは、各オブジェクトが持つ参照の数を追跡する手動のメモリ管理手法です。参照カウントが 0 になると、オブジェクトはガベージ コレクションされます。例:// 创建一个对象并将其存储在引用变量中 String myString = new String("Hello World"); // 获得对该对象的另一个引用 String anotherString = myString; // 释放 myString 对该对象的引用 myString = null; // 此时引用计数为 1(anotherString)
弱い参照
弱い参照は、ガベージ コレクターがオブジェクトを再利用するときにオブジェクトのリサイクルを妨げない特別な参照型です。例:// 创建一个弱引用 WeakReference<String> weakReference = new WeakReference<>(myString); // 释放对该对象的最后一个强引用 myString = null; // 此时 weakReference 仍然引用该对象,但该对象可以被垃圾回收
実用的なケース
ソフト参照を使用した画像のキャッシュ
ソフト参照を使用して画像をキャッシュできます。 。メモリが少ない場合、ソフト参照オブジェクトはイメージを再ロードせずにガベージ コレクションされる可能性があります。// 创建一个软引用缓存 Map<String, SoftReference<Image>> imageCache = new HashMap<>(); // 获取图像 Image image = getImage(url); // 将图像添加到缓存中 imageCache.put(url, new SoftReference<>(image)); // 获取图像 Image cachedImage = imageCache.get(url).get(); // 如果 cachedImage 为 null,则重新加载图像 if (cachedImage == null) { cachedImage = getImage(url); }
強い参照を使用してオブジェクトがガベージ コレクションされないようにします
強い参照を使用すると、オブジェクトが不要になった場合でも、オブジェクトがガベージ コレクションされなくなります。たとえば、シングルトン パターンでは、強参照を使用して、インスタンスが 1 つだけ作成されるようにします。// 创建单例的私有构造函数 private Singleton() { } // 创建一个强引用 private static final Singleton INSTANCE = new Singleton(); // 获取单例实例 public static Singleton getInstance() { return INSTANCE; }
注: 手動メモリ管理は、メモリ リークやその他の問題を引き起こす可能性があるため、注意して使用する必要があります。ほとんどの場合、Java アプリケーションでは自動ガベージ コレクションで十分です。
以上がJava でメモリを手動で管理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。