Rumah Java JavaAsas 3分钟了解JAVA中GC的概念

3分钟了解JAVA中GC的概念

Nov 30, 2019 pm 04:36 PM
gc konsep

3分钟了解JAVA中GC的概念

前言

GC(Garbage Collection)是我们在学习 JVM 的过程中不可避免的一道坎,接下来,我们就来系统的学习一下 GC。

3分钟了解JAVA中GC的概念

做一件事情之前,我们一定要去知道我们为什么要去做,这里不仅仅指 GC,更适用我们日常的学习和生活,知其然,知其所以然,方能百战不殆。

(推荐视频:java视频教程)  

下面我们先去了解为什么要有 GC,以及 GC 在 JVM 中扮演了一个什么样的角色,起到了什么的作用?

为什么要有 GC

用过 C++ 的同学可能知道,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象。如果我们不去手动的清除这些无用的对象,内存很快就被占满,而在 JVM 中,GC 所起到的作用就是一个清道夫,它可以帮助我们去判定哪些对象是无用对象,怎么进行垃圾收集,以及决定内存分代和内存分配的策略**。

可能有同学会问了,既然我们的 JVM 会给我们做 GC 的工作,我们为什么还要去学习 GC 呢,一切交给 JVM 不好吗?当然,在我们的日常情况下,我们一般不会去关心 GC 的一些细节,但是当我们遇到内存泄露,内存溢出,高并发瓶颈的时候,我们就需要去对 GC 开刀,进行更为细致的监控和调节。

内存泄露:指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

内存溢出:应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。

那么现在问题来了,我们要进行垃圾回收,首先我们需要知道垃圾在哪

垃圾在哪

前面我们讲了JVM 的运行时内存区域,知道线程可以分为线程独占区和线程共享区,其中线程独占区(程序计数器,虚拟机栈,本地方法栈)的内存生命周期是和线程保持一致,且这几个区域分配的内存大小跟类的大小有关,也就是说,当我们的类结构固定之后,这部分的内存就不会再发生更改,且当方法或线程结束的时候,内存自然就跟随着回收了.

而线程共享区的堆内存和方法区则不一样,堆内存和方法区所用的内存是在编译期间无法确定的,因为一个接口的不同实现,一个方法的不同控制条件分支所执行的代码可能完全相反,我们只有在运行时才知道会创建哪些对象,这部分的内存的分配和回收是动态的,而我们的 GC 关注的就是该部分的内存。

打个比方来说:JVM 如果是一辆车,线程独占区的就像是零件,在出厂时这些零件的寿命基本上都是已知的,线程共享区就像是汽油,汽油的消耗跟我们所采用的路线有关,所以我们关注的部分就是这部分会动态变化的,比如如何开车才能更省油~

本文来自php中文网,java教程栏目,欢迎学习!  

Atas ialah kandungan terperinci 3分钟了解JAVA中GC的概念. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah maksud konsep metaverse? Apakah maksud konsep metaverse? Feb 22, 2024 pm 03:55 PM

Metaverse ialah dunia ilusi yang menggunakan teknologi untuk memetakan dan berinteraksi dengan dunia sebenar. Analisis 1 Metaverse [Metaverse] ialah dunia ilusi yang menggunakan sepenuhnya kaedah teknologi untuk menghubungkan dan mencipta, dan memetakan dan berinteraksi dengan dunia sebenar Ia adalah ruang hidup data dengan sistem pembangunan sosial terkini. Alam semesta 2 dimensi pada asasnya ialah teknologi maya dan proses digital dunia nyata, yang memerlukan banyak transformasi pengeluaran kandungan, sistem ekonomi, pengalaman pelanggan dan kandungan dunia fizikal. 3 Walau bagaimanapun, aliran pembangunan metaverse adalah secara beransur-ansur Ia akhirnya dibentuk oleh gabungan berterusan dan evolusi banyak alat dan platform dengan sokongan infrastruktur, piawaian dan protokol yang dikongsi. Tambahan: Apakah metaverse terdiri daripada 1 Metaverse terdiri daripada Meta dan Ayat, Meta ialah transendensi, dan V

Kuasai konsep utama Spring MVC: Fahami ciri penting ini Kuasai konsep utama Spring MVC: Fahami ciri penting ini Dec 29, 2023 am 09:14 AM

Fahami ciri utama SpringMVC: Untuk menguasai konsep penting ini, contoh kod khusus diperlukan SpringMVC ialah rangka kerja pembangunan aplikasi web berasaskan Java yang membantu pembangun membina struktur yang fleksibel dan berskala melalui corak seni bina Model-View-Controller (MVC). aplikasi web. Memahami dan menguasai ciri utama SpringMVC akan membolehkan kami membangun dan mengurus aplikasi web kami dengan lebih cekap. Artikel ini akan memperkenalkan beberapa konsep penting SpringMVC

Ketahui lebih lanjut tentang asas dan ciri Gunicorn Ketahui lebih lanjut tentang asas dan ciri Gunicorn Jan 03, 2024 am 08:41 AM

Konsep dan fungsi asas Gunicorn Gunicorn ialah alat untuk menjalankan pelayan WSGI dalam aplikasi web Python. WSGI (Antara Muka Gerbang Pelayan Web) ialah spesifikasi yang ditakrifkan oleh bahasa Python dan digunakan untuk menentukan antara muka komunikasi antara pelayan web dan aplikasi web. Gunicorn membolehkan aplikasi web Python digunakan dan dijalankan dalam persekitaran pengeluaran dengan melaksanakan spesifikasi WSGI. Fungsi Gunicorn adalah untuk

Perbincangan tentang strategi pengoptimuman gc Golang Perbincangan tentang strategi pengoptimuman gc Golang Mar 06, 2024 pm 02:39 PM

Kutipan sampah (GC) Golang sentiasa menjadi topik hangat di kalangan pemaju. Sebagai bahasa pengaturcaraan yang pantas, pengumpul sampah terbina dalam Golang boleh mengurus memori dengan sangat baik, tetapi apabila saiz program bertambah, beberapa masalah prestasi kadangkala berlaku. Artikel ini akan meneroka strategi pengoptimuman GC Golang dan menyediakan beberapa contoh kod khusus. Pengumpulan sampah dalam pemungut sampah Golang Golang adalah berdasarkan sapuan tanda serentak (concurrentmark-s

Pengenalan dan konsep teras Oracle RAC Pengenalan dan konsep teras Oracle RAC Mar 07, 2024 am 11:39 AM

Pengenalan dan konsep teras OracleRAC (RealApplicationClusters) Dengan pertumbuhan berterusan volum data perusahaan dan permintaan yang semakin menonjol untuk ketersediaan tinggi dan prestasi tinggi, teknologi kluster pangkalan data menjadi semakin penting. OracleRAC (RealApplicationClusters) direka untuk menyelesaikan masalah ini. OracleRAC ialah penyelesaian pangkalan data kluster yang mempunyai ketersediaan tinggi dan berprestasi tinggi yang dilancarkan oleh Oracle.

Tulis program Java untuk mengira luas dan perimeter segi empat tepat menggunakan konsep kelas Tulis program Java untuk mengira luas dan perimeter segi empat tepat menggunakan konsep kelas Sep 03, 2023 am 11:37 AM

Bahasa Java adalah salah satu bahasa pengaturcaraan berorientasikan objek yang paling biasa digunakan di dunia hari ini. Konsep kelas adalah salah satu ciri terpenting bahasa berorientasikan objek. Kelas adalah seperti pelan tindakan untuk objek. Sebagai contoh, apabila kita ingin membina rumah, kita mula-mula membuat blueprint rumah, dengan kata lain, kita membuat rancangan yang menunjukkan bagaimana kita akan membina rumah tersebut. Mengikut rancangan ini kita boleh membina banyak rumah. Begitu juga, menggunakan kelas, kita boleh mencipta banyak objek. Kelas ialah cetak biru untuk mencipta banyak objek, dengan objek ialah entiti dunia sebenar seperti kereta, basikal, pen, dsb. Kelas mempunyai ciri-ciri semua objek, dan objek mempunyai nilai ciri-ciri ini. Dalam artikel ini, kami akan menulis program Java untuk mencari perimeter dan muka segi empat tepat menggunakan konsep kelas

Apakah direktori rumah Oracle? Penjelasan terperinci tentang konsep dan fungsi direktori rumah Oracle Apakah direktori rumah Oracle? Penjelasan terperinci tentang konsep dan fungsi direktori rumah Oracle Mar 08, 2024 am 08:18 AM

Tajuk: Katalog Induk Oracle: Konsep, Fungsi dan Contoh Kod Katalog induk (MasterCatalog) dalam pangkalan data Oracle ialah struktur direktori asas pangkalan data dan digunakan untuk menyimpan metadata tentang objek pangkalan data dan maklumat pangkalan data lain. Direktori rumah memainkan peranan sebagai pusat pengurusan pangkalan data, merekodkan maklumat tentang semua objek dalam pangkalan data, seperti jadual, indeks, pandangan, pengguna, dll., dan juga termasuk maklumat konfigurasi pangkalan data dan maklumat kebenaran. Dalam pangkalan data Oracle, konsep direktori rumah adalah sangat penting, ia digunakan

Membongkar rahsia rekursi Java: dari teori kepada aplikasi Membongkar rahsia rekursi Java: dari teori kepada aplikasi Jan 30, 2024 am 10:07 AM

Meneroka Misteri Java Rekursi: Dari Konsep kepada Amalan Pengenalan: Rekursi ialah teknik pengaturcaraan penting dalam sains komputer dan digunakan secara meluas dalam banyak algoritma dan struktur data. Sebagai bahasa pengaturcaraan yang popular, Java juga menyediakan mekanisme rekursif yang kuat. Artikel ini akan membawa anda menerokai misteri rekursi Java dengan menganalisis konsep, prinsip dan aplikasi praktikal rekursi. 1. Konsep dan Prinsip Rekursi 1.1 Definisi rekursi Rekursi bermaksud apabila menyelesaikan masalah, masalah dipecahkan kepada sub-masalah yang lebih kecil dengan struktur yang sama dan diselesaikan dengan memanggil sendiri.

See all articles