Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
product-management-docker
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
mbdk-tot
product-management-docker
Commits
9ee33537
Commit
9ee33537
authored
May 23, 2025
by
Muhammad Hazizi bin Satiman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
no message
parent
550df333
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
138 additions
and
0 deletions
+138
-0
JAVA.md
JAVA.md
+138
-0
PENGENALAN DOCKER.docx
PENGENALAN DOCKER.docx
+0
-0
No files found.
JAVA.md
View file @
9ee33537
...
@@ -255,7 +255,145 @@ try {
...
@@ -255,7 +255,145 @@ try {
---
---
# 📦 Pengurusan Memori: Stack, Heap & Garbage Collector dalam Java
---
## 📊 Jadual Ringkasan: Garbage Collector dalam Java
| Ciri | Penjelasan |
|-------------------------------|-----------------------------------------------------------------------------|
| Apa itu GC? | Proses automatik oleh JVM untuk membuang objek dalam heap yang tidak digunakan |
| Bila GC jalan? | Bila heap makin penuh, atau secara berkala ditentukan oleh JVM |
| Apa objek yang dibuang? | Objek yang
**tiada lagi reference aktif**
dari stack, static, atau thread |
| Kawasan utama GC bekerja |
**Heap memory**
|
| Apa yang tidak disentuh GC? | Stack memory, reference masih aktif, primitive types |
---
## 🔁 Carta Alir Garbage Collector
```
[JVM Berjalan]
↓
[Cipta Objek Baru dalam Heap]
↓
[Masih Ada Reference?]
┌──────────────┐
│ Ya │ → [Objek Aktif, Simpan Dalam Heap]
└────┬─────────┘
│ Tidak
↓
[Objek Tiada Reference]
↓
[Layak untuk Dibuang oleh GC]
↓
[Garbage Collector Jalan]
↓
[Buang Objek dari Heap, Kosongkan Memori]
↓
[JVM Terus Berjalan]
```
## ✅ Contoh 1: Garbage Collector Buang Objek Bila Tiada Reference
```
java
public
class
GCDemo
{
static
class
Data
{
int
[]
values
=
new
int
[
1_000_000
];
// Ambil ruang dalam heap
}
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
"Program bermula..."
);
for
(
int
i
=
0
;
i
<
10
;
i
++)
{
Data
d
=
new
Data
();
// d hanya hidup dalam 1 pusingan
System
.
out
.
println
(
"Objek "
+
(
i
+
1
)
+
" dicipta"
);
}
System
.
out
.
println
(
"Semua objek tiada reference, GC boleh buang bila perlu."
);
}
}
```
### 💡 Penjelasan:
-
`Data d`
hanya wujud dalam setiap pusingan
-
Bila pusingan seterusnya bermula,
`d`
yang lama
**hilang reference**
-
Objek lama di heap jadi
**layak dibuang oleh GC**
### ✅ Expected Output:
```
Program bermula...
Objek 1 dicipta
Objek 2 dicipta
...
Objek 10 dicipta
Semua objek tiada reference, GC boleh buang bila perlu.
```
---
## ❌ Contoh 2: Memory Leak — Objek Masih Dirujuk Walaupun Tak Digunakan Lagi
```
java
import
java.util.ArrayList
;
import
java.util.List
;
public
class
MemoryLeakDemo
{
static
List
<
Data
>
cache
=
new
ArrayList
<>();
static
class
Data
{
int
[]
values
=
new
int
[
1_000_000
];
// 1 juta int = ±4MB
}
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
"Program mula (dengan memory leak)..."
);
for
(
int
i
=
0
;
i
<
1000
;
i
++)
{
cache
.
add
(
new
Data
());
// Objek masih dirujuk oleh `cache`
System
.
out
.
println
(
"Tambah objek ke-"
+
(
i
+
1
));
}
System
.
out
.
println
(
"Selesai. Semua objek masih dirujuk — GC tak boleh buang."
);
}
}
```
### ❗ Penjelasan:
-
Semua objek
`new Data()`
masih disimpan dalam
`static List cache`
-
GC
**tak boleh buang**
sebab reference masih ada
-
Bila terlalu banyak objek disimpan,
**heap penuh → `OutOfMemoryError`**
### ❌ Expected Output:
```
Program mula (dengan memory leak)...
Tambah objek ke-1
Tambah objek ke-2
...
Tambah objek ke-300
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
```
---
## 📌 Jalankan dengan GC Log (opsyenal):
```
bash
java
-Xmx128m
-XX
:+PrintGC GCDemo
```
---
## ✅ Ringkasan
| Contoh | Apa Jadi? |
|----------------------------------|-----------------------------------------------|
|
`GCDemo`
| GC boleh buang objek selepas hilang reference |
|
`MemoryLeakDemo`
| Semua objek masih dirujuk → GC tak boleh buang |
| `static` atau `List` tanpa buang | Punca memory leak biasa dalam Java |
---
## 🧠 Asas Pemrograman Berorientasikan Objek (OOP)
## 🧠 Asas Pemrograman Berorientasikan Objek (OOP)
...
...
PENGENALAN DOCKER.docx
View file @
9ee33537
No preview for this file type
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment