What you see on paper is ultimately shallow, but you know you have to do it in detail --Lu You Ask the canal how clear it is, so that there is a source of running water --Zhu Xi
Java starts from version 1.2 Four types of references are introduced. The levels of these four references from high to low are: Strong reference>Soft reference>Weak reference>Virtual reference.
1. Strong Reference:
Strong reference is the most commonly used reference. Generally, after we initialize the object, it will be a strong reference. Quote. When an object has a strong reference, the JVM will not garbage collect it. When there is insufficient memory, it would rather throw an OutofMemoryError and let the program terminate abnormally than recycle strong references.
2. Soft Reference:
If an object is a weak reference, it will not be referenced if there is enough memory. Carry out garbage collection; if the memory space is insufficient, these objects will be recycled. As long as the garbage collector does not reclaim it, the program can use it. Soft references can be used to implement memory-sensitive caching. Soft references can be used in conjunction with a reference queue (ReferenceQueue). If the object referenced by the soft reference is recycled by the garbage collector, the Java virtual machine will add the soft reference to the reference queue associated with it.
3. Weak Reference:
The difference between weak reference and soft reference is that weak reference has a shorter life cycle. When the garbage collector scans a memory area, it will be recycled whenever a weak reference is found. However, since the garbage collector is a relatively low-priority thread, it may not necessarily find those weak reference objects quickly. Weak references can be used in conjunction with a reference queue (ReferenceQueue). If the object referenced by the weak reference is garbage collected, the Java virtual machine will add the weak reference to the associated reference queue.
4. Phantom Reference:
Unlike other references, phantom references do not determine the life cycle of the object. . If an object holds only phantom references, it may be reclaimed by the garbage collector at any time as if it had no references. Virtual references are mainly used to track the activities of objects being recycled by the garbage collector. One difference between virtual references, soft references and weak references is that virtual references must be used in conjunction with a reference queue (ReferenceQueue). When the garbage collector is preparing to recycle an object, if it finds that it still has a virtual reference, it will add the virtual reference to it before reclaiming the object's memory. in the associated reference queue.
Sample code:
Strong reference:
public class MyClass { MyClass() { } }public class Test { public static void main(String [] args) { MyClass myClass=new MyClass(); System.gc(); } }
Garbage collection is explicitly called, but due to myClass is a strong reference and myClass has not been recycled.
Soft reference:
public class MyClass { MyClass() { } }public class Test { public static void main(String [] args) { MyClass myClass=new MyClass(); SoftReference ref=new SoftReference(myClass); System.gc(); } }
Soft reference is recycled when there is insufficient memory.
Weak reference:
public class MyClass { MyClass() { } }public class Test { public static void main(String [] args) { MyClass myClass=new MyClass(); WeakReference ref=new WeakReference(myClass); System.gc(); } }
Weak reference will be recycled during JVM garbage collection.
Virtual reference:
public class MyClass { MyClass() { } }public class Test { public static void main(String [] args) { MyClass myClass=new MyClass(); ReferenceQueue rq=new ReferenceQueue(); PhantomReference pr=new PhantomReference(myClass,rq); System.gc(); } }
Virtual reference will be recycled after being instantiated.
Summary:
Level |
When to be garbage collected |
Purpose |
Survival time |
Strong reference |
Never |
General state of the object |
JVM terminates when it stops running |
##Soft reference |
When there is insufficient memory | The object is simple? Cache | Terminated when insufficient memory |
Weak reference |
During garbage collection | Object cache | gc terminates after running |
Virtual reference |
Unknown |
##Unknown | Unknown |
Detailed comparison of basic type variables and reference type variables in Java
Analysis of the concept of reference types in Java
Detailed explanation of the difference between JavaScript basic data types and reference types
The above is the detailed content of A detailed introduction to Java's four reference types. For more information, please follow other related articles on the PHP Chinese website!

Javadevelopmentisnotentirelyplatform-independentduetoseveralfactors.1)JVMvariationsaffectperformanceandbehavioracrossdifferentOS.2)NativelibrariesviaJNIintroduceplatform-specificissues.3)Filepathsandsystempropertiesdifferbetweenplatforms.4)GUIapplica

Java code will have performance differences when running on different platforms. 1) The implementation and optimization strategies of JVM are different, such as OracleJDK and OpenJDK. 2) The characteristics of the operating system, such as memory management and thread scheduling, will also affect performance. 3) Performance can be improved by selecting the appropriate JVM, adjusting JVM parameters and code optimization.

Java'splatformindependencehaslimitationsincludingperformanceoverhead,versioncompatibilityissues,challengeswithnativelibraryintegration,platform-specificfeatures,andJVMinstallation/maintenance.Thesefactorscomplicatethe"writeonce,runanywhere"

Platformindependenceallowsprogramstorunonanyplatformwithoutmodification,whilecross-platformdevelopmentrequiressomeplatform-specificadjustments.Platformindependence,exemplifiedbyJava,enablesuniversalexecutionbutmaycompromiseperformance.Cross-platformd

JITcompilationinJavaenhancesperformancewhilemaintainingplatformindependence.1)Itdynamicallytranslatesbytecodeintonativemachinecodeatruntime,optimizingfrequentlyusedcode.2)TheJVMremainsplatform-independent,allowingthesameJavaapplicationtorunondifferen

Javaispopularforcross-platformdesktopapplicationsduetoits"WriteOnce,RunAnywhere"philosophy.1)ItusesbytecodethatrunsonanyJVM-equippedplatform.2)LibrarieslikeSwingandJavaFXhelpcreatenative-lookingUIs.3)Itsextensivestandardlibrarysupportscompr

Reasons for writing platform-specific code in Java include access to specific operating system features, interacting with specific hardware, and optimizing performance. 1) Use JNA or JNI to access the Windows registry; 2) Interact with Linux-specific hardware drivers through JNI; 3) Use Metal to optimize gaming performance on macOS through JNI. Nevertheless, writing platform-specific code can affect the portability of the code, increase complexity, and potentially pose performance overhead and security risks.

Java will further enhance platform independence through cloud-native applications, multi-platform deployment and cross-language interoperability. 1) Cloud native applications will use GraalVM and Quarkus to increase startup speed. 2) Java will be extended to embedded devices, mobile devices and quantum computers. 3) Through GraalVM, Java will seamlessly integrate with languages such as Python and JavaScript to enhance cross-language interoperability.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.
