search
HomeJavajavaTutorialJVM memory management------Introduction to garbage collector

We have discussed various GC algorithms in the previous chapter, so what is a garbage collector?
In layman's terms, using a programming language to implement an algorithm, the resulting program is a garbage collector. Now that we have talked about the implementation of programming languages, when discussing garbage collectors, we have already involved specific virtual machine implementations.
Perhaps many JAVA developers don’t know that in the JDK we usually use, the default JVM is hotspot. In other words, the JVM we use most of the time is the implementation version of hotspot. Therefore, The garbage collector discussed in LZ this time is all based on the hotspot version of JVM. Please be aware of this.
More intuitively, we can enter java -version to check the JVM version on the machine we usually develop. I believe most ape friends are familiar with this command. The screenshot of LZ’s machine is as follows.

JVM memory management------Introduction to garbage collector

Classification of garbage collectors

We have mentioned above that the garbage collector is actually the programming language implementation of the algorithm. Since programming languages ​​are involved, threads must be inseparable, and when we explained the algorithm earlier, we always assumed that a GC thread was doing GC work.
Therefore, garbage collectors are roughly divided into the following three categories.
Serial collector: It has only one GC thread, and as mentioned before, it needs to pause the user program (stop the world) when running.
Parallel collector: It has multiple GC threads, and it also needs to pause the user program (stop the world).
Concurrent collector: It has one or more GC threads, and it needs to suspend the user program (stop the world) in some stages, and execute part of the stage concurrently with the user program.

Concurrency and Parallel

After reading the above definition, I believe some friends have been confused. Sometimes it is single-threaded, sometimes it is multi-threaded, and sometimes it is serial. , sometimes parallel, sometimes concurrent, is this all nonsense?
There is no need to say more about single-threading and multi-threading. This is easy to understand. Serial and parallel are also easy to understand. What is difficult to distinguish is parallel (parallel) and concurrent (concurrent).
For many explanations about concurrency, LZ thinks there is one that is most appropriate. It is explained this way, concurrency means that two tasks A and B need to run independently of each other, and after task A starts first, task B starts before task A ends.
Concurrency itself is relatively easy to understand, so what is its relationship and difference with parallelism?
In fact, parallelism is an implementation method of concurrency. LZ thinks you may understand it better by saying this. Of course, parallelism is not the only way to achieve concurrency. Another way is the time slice switching that we are familiar with. That is, task A is executed for a while, task B is executed for a while, and executed alternately.
Parallelism can only occur under the premise of multi-core multi-processor or distributed system (essentially still multi-core multi-processor), while alternate execution or time slice switching occurs on a single-core processor.

Garbage collector in hotspot

We have briefly discussed the classification of garbage collectors above. In hotspotJVM, each type of garbage collector has a corresponding implementation, as follows.
Implementation of serial collector: serial (used for the new generation, using the copy algorithm), serial old (used for the old generation, using the marking/collation algorithm)
Implementation of the parallel collector: ParNew (used for New generation, using replication algorithm), Parallel Scavenge (used in new generation, using replication algorithm), Parallel old (used in old generation, using marking/collation algorithm)
Implementation of concurrent collector: concurrent mark sweep[CMS ] (used in the old generation, using mark/clear algorithm)
As you can see, each of the above garbage collectors is designed for different memory areas, because they use different algorithms, and they are usually used in the new generation. The ones used for the old generation all use the copy algorithm, and those used for the old generation all use the mark/clear or mark/complement algorithm.
In practical applications, we need to select garbage collectors for the new generation and the old generation of the JVM. We can see that there are three implementations for both the new generation and the old generation. In other words, we should have 3 *3=9 choices. But that is not the case.

In fact, there are only six choices for these six garbage collectors, because some garbage collectors cannot work together due to a series of reasons such as specific implementation methods, as shown below.

JVM memory management------Introduction to garbage collector

In the above picture, the red one is the serial collector, the green one is the parallel collector, and the only yellow one is the concurrent collector. The top three are the collectors of the new generation, and the bottom three are the collectors of the old generation. If there is a connection between the two, it means that the two can work together.
These six combinations do not say which combination is the strongest and which is the weakest. Again, there is only the most suitable, not the best. Therefore, we need to have a certain understanding of each combination in order to choose a more suitable garbage collector when using it.

Conclusion

The above is the content of JVM memory management------garbage collector introduction. 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
JVM performance vs other languagesJVM performance vs other languagesMay 14, 2025 am 12:16 AM

JVM'sperformanceiscompetitivewithotherruntimes,offeringabalanceofspeed,safety,andproductivity.1)JVMusesJITcompilationfordynamicoptimizations.2)C offersnativeperformancebutlacksJVM'ssafetyfeatures.3)Pythonisslowerbuteasiertouse.4)JavaScript'sJITisles

Java Platform Independence: Examples of useJava Platform Independence: Examples of useMay 14, 2025 am 12:14 AM

JavaachievesplatformindependencethroughtheJavaVirtualMachine(JVM),allowingcodetorunonanyplatformwithaJVM.1)Codeiscompiledintobytecode,notmachine-specificcode.2)BytecodeisinterpretedbytheJVM,enablingcross-platformexecution.3)Developersshouldtestacross

JVM Architecture: A Deep Dive into the Java Virtual MachineJVM Architecture: A Deep Dive into the Java Virtual MachineMay 14, 2025 am 12:12 AM

TheJVMisanabstractcomputingmachinecrucialforrunningJavaprogramsduetoitsplatform-independentarchitecture.Itincludes:1)ClassLoaderforloadingclasses,2)RuntimeDataAreafordatastorage,3)ExecutionEnginewithInterpreter,JITCompiler,andGarbageCollectorforbytec

JVM: Is JVM related to the OS?JVM: Is JVM related to the OS?May 14, 2025 am 12:11 AM

JVMhasacloserelationshipwiththeOSasittranslatesJavabytecodeintomachine-specificinstructions,managesmemory,andhandlesgarbagecollection.ThisrelationshipallowsJavatorunonvariousOSenvironments,butitalsopresentschallengeslikedifferentJVMbehaviorsandOS-spe

Java: Write Once, Run Anywhere (WORA) - A Deep Dive into Platform IndependenceJava: Write Once, Run Anywhere (WORA) - A Deep Dive into Platform IndependenceMay 14, 2025 am 12:05 AM

Java implementation "write once, run everywhere" is compiled into bytecode and run on a Java virtual machine (JVM). 1) Write Java code and compile it into bytecode. 2) Bytecode runs on any platform with JVM installed. 3) Use Java native interface (JNI) to handle platform-specific functions. Despite challenges such as JVM consistency and the use of platform-specific libraries, WORA greatly improves development efficiency and deployment flexibility.

Java Platform Independence: Compatibility with different OSJava Platform Independence: Compatibility with different OSMay 13, 2025 am 12:11 AM

JavaachievesplatformindependencethroughtheJavaVirtualMachine(JVM),allowingcodetorunondifferentoperatingsystemswithoutmodification.TheJVMcompilesJavacodeintoplatform-independentbytecode,whichittheninterpretsandexecutesonthespecificOS,abstractingawayOS

What features make java still powerfulWhat features make java still powerfulMay 13, 2025 am 12:05 AM

Javaispowerfulduetoitsplatformindependence,object-orientednature,richstandardlibrary,performancecapabilities,andstrongsecurityfeatures.1)PlatformindependenceallowsapplicationstorunonanydevicesupportingJava.2)Object-orientedprogrammingpromotesmodulara

Top Java Features: A Comprehensive Guide for DevelopersTop Java Features: A Comprehensive Guide for DevelopersMay 13, 2025 am 12:04 AM

The top Java functions include: 1) object-oriented programming, supporting polymorphism, improving code flexibility and maintainability; 2) exception handling mechanism, improving code robustness through try-catch-finally blocks; 3) garbage collection, simplifying memory management; 4) generics, enhancing type safety; 5) ambda expressions and functional programming to make the code more concise and expressive; 6) rich standard libraries, providing optimized data structures and algorithms.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

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

Hot Article

Hot Tools

MinGW - Minimalist GNU for Windows

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.

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool