Home  >  Article  >  Java  >  Java Virtual Machine Learning - Object Reference Strength

Java Virtual Machine Learning - Object Reference Strength

黄舟
黄舟Original
2017-02-17 10:34:021396browse

Whether it is to determine the number of references to an object through a counting algorithm, or to determine whether the object reference chain is reachable through a root search algorithm, determining whether an object is alive is related to "references".

References are mainly divided into four types: Strong Reference, Soft Reference, Weak Reference, and Phantom Reference. The strength of the reference decreases sharply in turn.

Strong quotation:


refers to what is common in the code, similar to: "Object objectRef = new Object", this kind of reference will never be cleaned up by GC as long as the strong reference still exists.

Soft reference:

is used to describe some objects that are useful but do not necessarily exist. When the Jvm is out of memory (before memory overflow ) will be recycled. If there is still not enough space after executing GC, a memory overflow exception will be thrown.

Soft references are implemented through the SoftReference class. SoftReference is very suitable for implementing caching. In addition, when the GC believes that the scanned SoftReference is not frequently used, it may be recycled.

Usage:


##

		User user = new User();
		SoftReference<Object> softReference  = new SoftReference<Object>(user);
		softReference.get();

Weak reference

Weak reference is also used Describes some objects that are useful but do not necessarily exist. Their strength will be weaker due to soft references. Objects associated with weak references can only survive until the next GC. When the GC works, it will be recycled regardless of whether the memory is sufficient. Drop objects associated with weak references. JDK implements this through the WeakReference class.

When obtained, it can be obtained through the weakReference.get method, which may return null

You can pass in a ReferenceQueue object to the WeakReference construct. When the reference object is represented as recyclable, isEnqueued returns true


                User user = new User();
		WeakReference<User> weakReference = new WeakReference<User>(user);
		weakReference.get();
		
		ReferenceQueue<User> referenceQueue = new ReferenceQueue<User>();
		WeakReference<User> weakReference2 = new WeakReference<User>(user, referenceQueue);
		//当引用对象被标识为可回收时  返回true,  即当user对象标识为可回收时,返回true
		weakReference.isEnqueued();

Dummy reference

Dummy reference is called "phantom reference" and it is the weakest A reference relationship, whether an object has a virtual reference, will not affect the survival time at all. The only purpose of setting a virtual reference association for an object is to receive a system notification when the object is recycled by GC. Implemented through the PhantomReference class.

It is worth noting that the phantomReference.get method always returns null. When the user is deleted from the memory, calling isEnqueued will return true


		User user = new User();
		ReferenceQueue<User> referenceQueue = new ReferenceQueue<User>();
		PhantomReference<User>  phantomReference = new PhantomReference<User>(user, referenceQueue);
		//即当user对象标识为可回收时,返回true
		System.out.println(phantomReference.isEnqueued());
		//永远返回null
		System.out.println(phantomReference.get());

Other related classes:


		WeakCache weakCache  = new WeakCache();
		SoftCache softCache = new SoftCache();
		WeakHashMap weakHashMap  = new WeakHashMap();


## When the garbage collection mechanism is running, scanning reference relationships, GC These three types of references will be processed differently. Simply put, the GC will first determine whether the reference scanned is a Reference type. If it is a Reference type and the object it refers to has no strong reference, the object will be considered For the corresponding Reference type, these objects will be processed accordingly according to the different Reference types during GC garbage collection.

The above is the content of Java virtual machine learning - object reference strength. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn