2์ฃผ์ฐจ ์๋ฃ์ ๋ชจ๋ ํ ํฝ์ "ํ๋ฉด โ ๊น์ด" ์์๋ก ์ฌ๋ฐฐ์ดํ ํ์ต ๊ฒฝ๋ก.
1์ฃผ์ฐจ์์ OOPยทJVMยทGCยท์ปฌ๋ ์ ์ ๊ฐ๋ก ์ผ๋ก ๋ดค๋ค๋ฉด, 2์ฃผ์ฐจ๋ ๋์ผ ์ฃผ์ ๋ฅผ JVM ๋ด๋ถยท๋ฐ์ดํธ์ฝ๋ยท๋ฉ๋ชจ๋ฆฌ ๋งคํ ์์ค์ผ๋ก ํ๊ณ ๋ ๋ค.
์๋ก ๋ฑ์ฅํ๋ ์ฃผ์ : Reflection, Iterator, ๋ฒํผ(Buffer).
[Phase 1] ์๋ฐ ๋ณ์ โ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋งคํ
โ
[Phase 2] JVM ๋ฉ์๋ ์คํ ๋ฉ์ปค๋์ฆ
โ
[Phase 3] ๋ฐ์ดํธ์ฝ๋์ ์์ ํ์ ์ธ๊ณ โโโ ์ฌ๊ธฐ๊ฐ 2์ฃผ์ฐจ์ ์ ์
โ
[Phase 4] GC ์ฌํ โ G1 GC ๋ค์ฌ๋ค๋ณด๊ธฐ
โ
[Phase 5] ์ปฌ๋ ์
ํ๋ ์์ํฌ ๋ด๋ถ ๊ตฌ์กฐ
โ
[Phase 6] ๋์ ํ๋ก๊ทธ๋๋ฐ โ Reflection & Iterator
โ
[Phase 7] ๋ณด์กฐ ๊ฐ๋
โ Buffer
์ด 7 Phase ร 23 Unit โ ๊ฐ Unit์ 30๋ถ~1์๊ฐ ๋ถ๋.
| 1์ฃผ์ฐจ (๊ฐ๋ก ) | 2์ฃผ์ฐจ (์ฌํ) |
|---|---|
| JVM ๋ฉ๋ชจ๋ฆฌ ์์ญ์ 5๋ถํ | Method Area์ 3๊ฐ ์กด ์ผ๋ก ๋ ์ชผ๊ฐ๊ธฐ |
| GC์ ๋์ ์๋ฆฌ | G1 GC ๋ฆฌ์ ๋ชจ๋ธ ๊ณผ ์ ์ง์๊ฐ ์์ธก |
| ArrayList vs LinkedList ๋น๊ต | ๋ฐฐ์ด ํ์ฅ ์ ์ฑ ยท๋ ธ๋ ๊ตฌ์กฐ ์ฝ๋๋ก ๊ฒ์ฆ |
| (์์) | ๋ฐ์ดํธ์ฝ๋ ์ฝ๊ธฐ, Reflection, Iterator |
| Day | Phase | ํ์ต ๋ชฉํ |
|---|---|---|
| 1์ผ์ฐจ | Phase 1 | ๋ณ์ 3์ข ๋ฅ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋งคํ ์ ๋ณต |
| 2์ผ์ฐจ | Phase 2 | ๋ฉ์๋ ํธ์ถ์ด JVM ์์์ ์ด๋ป๊ฒ ์ผ์ด๋๋์ง |
| 3์ผ์ฐจ | Phase 3 (์ ๋ฐ) | ๋ฐ์ดํธ์ฝ๋ ์ฝ๋ ๋ฒ + ์์ ํ |
| 4์ผ์ฐจ | Phase 3 (ํ๋ฐ) | ์ฌ๋ณผ ์ฐธ์กฐ์ new์ ์ง์ค |
| 5์ผ์ฐจ | Phase 4 | G1 GC์ ๋ชจ๋ ๊ฒ |
| 6์ผ์ฐจ | Phase 5 + 7 | ์ปฌ๋ ์ ๋ด๋ถ + Buffer |
| 7์ผ์ฐจ | Phase 6 | Reflection + Iterator |
๋ชฉํ: "์ด ๋ณ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ด๋์ ์ ์ฅ๋ ๊น?"์ ์ฆ๋ตํ ์ ์๊ฒ ๋๋ค.
1์ฃผ์ฐจ์์๋ Heap/Stack/Method Area๋ฅผ ํฐ ๊ทธ๋ฆผ์ผ๋ก ๋ดค๋ค๋ฉด, ์ฌ๊ธฐ์ ๋ณ์ ์ข ๋ฅ โ ์์ญ ๋งคํ ์ ์์ ์ตํ๋ค.
์ ์ ์ง์: 1์ฃผ์ฐจ Phase 2 (ํด๋์ค/๋ฉ์๋)
ํต์ฌ ๊ฐ๋
static ์์ด ํด๋์ค์ ์ ์ธ, ๊ฐ์ฒด๋ณ๋ก ์กด์ฌstatic์ผ๋ก ์ ์ธ, ํด๋์ค ๋จ์ 1๊ฐ์๊ธฐ ์ ๊ฒ
์ ์ ์ง์: Unit 1.1
ํต์ฌ ๊ฐ๋
| ๋ณ์ ์ข ๋ฅ | ์ ์ฅ ์์ญ | ์์ฑ ์์ | ์๋ฉธ ์์ |
|---|---|---|---|
| ์ง์ญ ๋ณ์ | Stack | ๋ฉ์๋ ํธ์ถ | ๋ฉ์๋ ์ข ๋ฃ |
| ์ธ์คํด์ค ๋ณ์ | Heap (๊ฐ์ฒด์ ํจ๊ป) | new ์์ | GC๊ฐ ๊ฐ์ฒด ํ์ ์ |
| ํด๋์ค ๋ณ์ | Method Area | ํด๋์ค ๋ก๋ฉ ์ | JVM ์ข ๋ฃ ์ |
์๊ธฐ ์ ๊ฒ
Member m = new Member() ์์ m(์ฐธ์กฐ)๊ณผ Member ๊ฐ์ฒด ๋ณธ์ฒด์ ์ ์ฅ ์์น๋?์ ์ ์ง์: Unit 1.2
ํต์ฌ ๊ฐ๋
Method Area
โโ Class Metadata Zone : ํด๋์ค๋ช
, ๋ถ๋ชจ, ๋ฉ์๋ ์๊ทธ๋์ฒ, ํ๋ ์ ์ธ ์ ๋ณด
โโ Static Zone : static ๋ฉ์๋/ํ๋์ ์ค์ ๋ฐ์ดํธ์ฝ๋
โโ Non-Static Zone : ์ธ์คํด์ค ๋ฉ์๋์ ์ค์ ๋ฐ์ดํธ์ฝ๋
์๊ธฐ ์ ๊ฒ
main() ์ด Static Zone์ ์๋ ์ด์ ๋?์ ์ ์ง์: Unit 1.2
ํต์ฌ ๊ฐ๋
์๊ธฐ ์ ๊ฒ
์ ์ ์ง์: Unit 1.3, Unit 1.4
ํต์ฌ ๊ฐ๋
new๋ก ๋ง๋ ๋ชจ๋ ๊ฐ์ฒด๋ Heap์new ์์ ์ Heap์ ๊ฐ์ฒด ์์ ํจ๊ป ํ ๋น์๊ธฐ ์ ๊ฒ
์ ์ ์ง์: Unit 1.5
ํต์ฌ ๊ฐ๋
"Hello world" ๊ฐ์ ๋ฆฌํฐ๋ด์ ํ ๋ฒ๋ง ๋ง๋ค๊ณ ์ฌ์ฌ์ฉ์๊ธฐ ์ ๊ฒ
String a = "abc"; String b = "abc"; ์ผ ๋ ๋ฉ๋ชจ๋ฆฌ์ String ๊ฐ์ฒด๋ ๋ช ๊ฐ ๋ง๋ค์ด์ง๋๊ฐ?๋ชฉํ: ๋ฉ์๋ ํธ์ถ ํ ์ค(
obj.method())์ด JVM ์์์ ์ค์ ๋ก ์ด๋ค ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋์ง ์ถ์ ํ ์ ์๋ค.
์ ์ ์ง์: Phase 1 ์ ์ฒด
ํต์ฌ ๊ฐ๋
๋ฉ์๋ ํธ์ถ ์ JVM์ ์ฒ๋ฆฌ ์์:
1. Class Metadata Zone์์ ๋ฉ์๋ ์๊ทธ๋์ฒ ํ์ธ
2. Static Zone ๋๋ Non-Static Zone์์ ์ค์ ๋ฐ์ดํธ์ฝ๋ ์ฐพ์์ ์คํ
์ฆ, "๋ฌด์์ ํธ์ถํ๋๊ฐ" ์ "์ค์ ์ฝ๋๊ฐ ์ด๋ ์๋๊ฐ" ๊ฐ ๋ถ๋ฆฌ๋์ด ์๋ค.
์๊ธฐ ์ ๊ฒ
์ ์ ์ง์: Unit 2.1
ํต์ฌ ๊ฐ๋
Model1.hap() โ hap() ์ผ๋ก๋ ํธ์ถ ๊ฐ๋ฅ)์๊ธฐ ์ ๊ฒ
main() ์์์ ์ธ์คํด์ค ๋ฉ์๋๋ฅผ ์ง์ ํธ์ถํ ์ ์๋ ์ด์ ๋?์ ์ ์ง์: Unit 2.2
์ผ์ด์ค: Model2 m2 = new Model2(); int sum = m2.hap(1, 2);
ํธ์ถ ๊ณผ์ ์ถ์
1. JVM์ด ๋ฐ์ดํธ์ฝ๋ ์ฝ๊ธฐ โ Class Metadata, Static Zone, Non-Static Zone์ ์ ๋ณด ์ ์ฌ
2. main() ์คํ ์์ (Static Zone)
3. new Model2() ๋ง๋๋ฉด:
Model2() ์์ฑ์๊ฐ Stack์ ํธ์ถ โ ์คํ โ ์ ๊ฑฐm2๋ก main ์คํ ํ๋ ์์ ์ ์ฅm2.hap(1, 2):hap() ๋ฐ๊ฒฌ โ Stack์ ํธ์ถ โ ์คํ โ ์ ๊ฑฐ์๊ธฐ ์ ๊ฒ
์ ์ ์ง์: Unit 2.3
ํต์ฌ ๊ฐ๋
new Model2() ํ ์ค์ด ํ๋ 4๊ฐ์ง:
1. Class Metadata Zone์์ Model2 ํด๋์ค ์ ๋ณด ์ฐพ๊ธฐ
2. Heap์ ๊ฐ์ฒด ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ํ๋ณด
3. ๋ฉค๋ฒ๋ณ์ ์ด๊ธฐํ (์๋ค๋ฉด)
4. ์์ฑ์(Constructor) ํธ์ถ
์๊ธฐ ์ ๊ฒ
new ์์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์๋ ๋ฐฉ๋ฒ์? (ํํธ: Reflection, clone, deserialization)๋ชฉํ:
.classํ์ผ์ ์ง์ ์ฝ์ ์ ์๊ฒ ๋๋ค. JVM์ด ํด๋์ค ์ ๋ณด๋ฅผ ์ด๋ป๊ฒ ์๋ณยท๊ด๋ฆฌํ๋์ง ๋ณธ๋ค.
์ ์ ์ง์: Phase 2 ์ ์ฒด
ํต์ฌ ๊ฐ๋
.java โ javac โ .class (๋ฐ์ดํธ์ฝ๋)javap -c MyClass์๊ธฐ ์ ๊ฒ
์ ์ ์ง์: Unit 3.1
ํต์ฌ ๊ฐ๋
#์ซ์ ํ๊ธฐ๋ ์์ ํ ์ธ๋ฑ์ค์๊ธฐ ์ ๊ฒ
์๋ณธ ์๋ฃ: JVM ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ, p.67
์ ์ ์ง์: Unit 3.2
ํต์ฌ ๊ฐ๋
#7 ๊ฐ์ ์ธ๋ฑ์ค โ ์์ ํ์์ "์ด๋ค ์ฌ๋ณผ์ธ๊ฐ" ์ฐพ์๋์์: new ๋ช
๋ น
4: new #7 // class org/example/CalHap#7 = ์์ ํ์ 7๋ฒ = org/example/CalHap ํด๋์ค ์ฌ๋ณผ์๊ธฐ ์ ๊ฒ
์๋ณธ ์๋ฃ: JVM ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ, p.67
์ ์ ์ง์: Unit 3.3
์์ ๋ถ์
public static void main(String[] args) {
int a=1, b=1;
CalHap ch = new CalHap(a, b);
ch.hap();
}
โ ๋ฐ์ดํธ์ฝ๋:
0: iconst_1 // a=1
1: istore_1
2: iconst_1 // b=1
3: istore_2
4: new #7 // new CalHap (#7์ ์์ ํ์ CalHap ํด๋์ค ์ฐธ์กฐ)
7: dup // ์คํ์ ๊ฐ์ฒด ์ฐธ์กฐ ๋ณต์
8: iload_1 // a๋ฅผ ์คํ์
9: iload_2 // b๋ฅผ ์คํ์
10: invokespecial #9 // ์์ฑ์ ํธ์ถ
13: astore_3 // ch์ ์ ์ฅ
์๊ธฐ ์ ๊ฒ
dup๋ ์ ํ์ํ๊ฐ? (ํํธ: ์์ฑ์ ํธ์ถ ํ์๋ ch์ ์ ์ฅํ ๊ฐ์ฒด ์ฐธ์กฐ๊ฐ ํ์)invokespecial, invokevirtual, invokestatic์ ์ฐจ์ด๋?๋ชฉํ: 1์ฃผ์ฐจ์์ ์ด๋ฆ๋ง ๋ดค๋ G1 GC๋ฅผ ๋ฆฌ์ ๋ชจ๋ธยท์ ์ง์๊ฐ ์์ธก ๋ชจ๋ธ ๊น์ง ์ดํดํ๋ค.
์ ์ ์ง์: 1์ฃผ์ฐจ Phase 5
ํต์ฌ ๊ฐ๋
์ํ ์ฐธ์กฐ ์๋๋ฆฌ์ค:
Root โ A โ B (A์ B๊ฐ ์๋ก ์ฐธ์กฐ)
Root๊ฐ ์ฐธ์กฐ๋ฅผ ๋์ด๋ AโB์ ์นด์ดํฐ๋ 0์ด ์ ๋จ โ ์์ํ ํ์ ์ ๋จ โ ๋ฉ๋ชจ๋ฆฌ ๋์
์๊ธฐ ์ ๊ฒ
์๋ณธ ์๋ฃ: JVM ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ, p.94
์ ์ ์ง์: Unit 4.1, 1์ฃผ์ฐจ Phase 5
ํต์ฌ ๊ฐ๋
์๊ธฐ ์ ๊ฒ
์ ์ ์ง์: Unit 4.2
ํต์ฌ ๊ฐ๋
๊ธฐ์กด GC vs G1:
[๊ธฐ์กด GC]
โโ Eden โโโฌโ Survivor โโโฌโโโ Old โโโโ โ ์์ญ ํฌ๊ธฐ ๊ณ ์ , ์์น ๊ณ ์
โ โ โ โ
โโโโโโโโโโโดโโโโโโโโโโโโโโดโโโโโโโโโโโโ
[G1 GC]
โโโฌโโฌโโฌโโฌโโฌโโฌโโฌโโฌโโฌโโฌโโฌโโฌโโ
โEโ โSโOโ โOโEโ โ โSโOโ โEโ โ ๊ฐ์ ํฌ๊ธฐ์ ๋ฆฌ์ , ์ญํ ์ ๋์ ์ผ๋ก ๋ถ์ฌ
โโโดโโดโโดโโดโโดโโดโโดโโดโโดโโดโโดโโดโโ
-XX:G1HeapRegionSize ๋ก ์กฐ์ ์๊ธฐ ์ ๊ฒ
์ ์ ์ง์: Unit 4.3
ํต์ฌ ๊ฐ๋
์๊ธฐ ์ ๊ฒ
์ ์ ์ง์: Unit 4.4
ํต์ฌ ๊ฐ๋
G1์ ํ์ ๊ธฐ์ค:
1. ์ด๋ ๋ฆฌ์ ์ ์ฐ๋ ๊ธฐ๊ฐ ๊ฐ์ฅ ๋ง์๊ฐ (ํ์ ๊ฐ๋ฅ ๊ณต๊ฐ ํฌ๊ธฐ)
2. ํ์์ ๋๋ ์๊ฐ์ด ์ผ๋ง์ธ๊ฐ (๊ฒฝํ๊ฐ์ผ๋ก ์์ธก)
3. โ ์ ์ง์๊ฐ ํ๋ ๋ด์์ ํ์ ํจ๊ณผ๊ฐ ํฐ ๋ฆฌ์ ๋ถํฐ ์ฒ๋ฆฌ
์ด๊ฒ G1์ ์ด๋ฆ์ ์ ๋: Garbage First (์ฐ๋ ๊ธฐ ๋ง์ ๊ณณ ๋จผ์ )
์๊ธฐ ์ ๊ฒ
๋ชฉํ: 1์ฃผ์ฐจ์ ArrayList vs LinkedList๋ฅผ ํฐ ๊ทธ๋ฆผ์ผ๋ก ๋ดค๋ค๋ฉด, ์ฌ๊ธฐ์๋ ๋ฐฐ์ด ํ์ฅ ์ ์ฑ ยท๋ ธ๋ ์ฐ๊ฒฐ ๊ตฌ์กฐ ๋ฅผ ์ฝ๋๋ก ๊ฒ์ฆํ๋ค.
์ ์ ์ง์: 1์ฃผ์ฐจ Phase 6
ํต์ฌ ๊ฐ๋
| ์๋ฃ๊ตฌ์กฐ | ์์ | ์ค๋ณต | ํค-๊ฐ |
|---|---|---|---|
| List | โ ์์ | โ ํ์ฉ | โ |
| Set | โ ์์ | โ ๋ถํ | โ |
| Map | โ ์์ | ํค โ / ๊ฐ โ | โ |
์๊ธฐ ์ ๊ฒ
์ ์ ์ง์: Unit 5.1
ํต์ฌ ๊ฐ๋
์๊ธฐ ์ ๊ฒ
new ArrayList<>(1000) ์ฒ๋ผ ์ด๊ธฐ ํฌ๊ธฐ๋ฅผ ์ง์ ํ๋ ๊ฒ ์ ํจ์จ์ ์ธ๊ฐ?์๋ณธ ์๋ฃ: ์๋ฐ์์ 2 + ์ปฌ๋ ์ ๋ด๋ถ ๋ถ์
์ ์ ์ง์: Unit 5.2
ํต์ฌ ๊ฐ๋
[์ด์ ๋
ธ๋ ์ฃผ์ | ๋ฐ์ดํฐ | ๋ค์ ๋
ธ๋ ์ฃผ์]์๊ธฐ ์ ๊ฒ
์ ์ ์ง์: Unit 5.2, Unit 5.3
ํต์ฌ ์ง๋ฌธ:
"ArrayList๋ LinkedList๋ ๊ฒฐ๊ตญ O(n)์ธ๋ฐ, ์ LinkedList๊ฐ ์ฝ์ /์ญ์ ์ ์ ๋ฆฌํ๋ค๊ณ ํ๋๊ฐ?"
๋ต: ๋น์ฉ์ ์ข ๋ฅ๊ฐ ๋ค๋ฅด๋ค.
| ์์ | ArrayList | LinkedList |
|---|---|---|
| ์์น ์ฐพ๊ธฐ | O(1) (์ธ๋ฑ์ค ์ง์ ์ ๊ทผ) | O(n) (์์ฐจ ํ์) |
| ์ค์ ์ฝ์ /์ญ์ | O(n) ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ | O(1) ์ฐธ์กฐ ๋ณ๊ฒฝ |
๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ๋ ๋ฐ์ดํฐ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋น์ฉ์ด ๋ ํฌ๊ฒ ์ฆ๊ฐํ๋ค. ๋ฐ์ดํฐ๊ฐ ๋ง์์๋ก ArrayList์ ๋ณต์ฌ ๋น์ฉ์ด ํญ์ฆ.
๊ฒ์ฆ ์ฝ๋ (์ง์ ๋๋ ค๋ณด๋ฉด์ ์ดํด)
int[] arr = new int[5];
arr[0]=0; arr[1]=1; arr[2]=2; arr[3]=3;
// ์ธ๋ฑ์ค 1์ 99๋ฅผ ์ฝ์
ํ๋ ค๋ฉด?
// arr[4]=arr[3], arr[3]=arr[2], arr[2]=arr[1], arr[1]=99
// โ ๋ฐ์ดํฐ๋ฅผ ์ผ์ผ์ด ๋ณต์ฌํด์ ๋ฐ์ด๋ธ๋ค
์๊ธฐ ์ ๊ฒ
๋ชฉํ: ์ปดํ์ผ ํ์ ์ ๋ณด๋ก ๋ค ํ๋ฆฌ์ง ์๋ ๋ฌธ์ ๋ ๊ฐ์ง โ ๋ฐํ์์ ํด๋์ค ์ ๋ณด ๋ค๋ฃจ๊ธฐ, ์ปฌ๋ ์ ํตํฉ ์ํ โ ์ ํด๊ฒฐ์ฑ ์ ๋ณธ๋ค.
์ ์ ์ง์: Phase 1 ์ ์ฒด
ํต์ฌ ๊ฐ๋
Object ๋ฅผ ์์ โ metadata๋ฅผ ๋๋ฐClass<?> API๋ก ์ ๊ทผ ๊ฐ๋ฅ์๊ธฐ ์ ๊ฒ
obj.getClass() ๊ฐ ๋ฐํํ๋ ๊ฒ์?Member.class ์ member.getClass() ์ ์ฐจ์ด๋?์ ์ ์ง์: Unit 6.1
ํต์ฌ ๊ฐ๋
์์ (๊ฐ๋ )
Class<?> clazz = Class.forName("org.example.Member");
Object obj = clazz.getDeclaredConstructor().newInstance();
Method m = clazz.getMethod("hap", int.class, int.class);
m.invoke(obj, 1, 2);
์๊ธฐ ์ ๊ฒ
์ ์ ์ง์: 1์ฃผ์ฐจ Phase 6
ํต์ฌ ๋ฌธ์ :
Iterator๊ฐ ์๋ ์์ , ์ปฌ๋ ์
๋ง๋ค ์ํ ๋ฐฉ์์ด ๋ฌ๋๋ค.
// ArrayList: ์ธ๋ฑ์ค ์ํ
for (int i = 0; i < list.size(); i++) { list.get(i); }
// HashSet: ์ธ๋ฑ์ค๊ฐ ์์ด์ ๋ค๋ฅธ ๋ฐฉ์ ํ์
// LinkedList: ๋ ๋ค๋ฅธ ๋ฐฉ์
๋ฌธ์ ์ :
์๊ธฐ ์ ๊ฒ
์ ์ ์ง์: Unit 6.3
ํต์ฌ ๊ฐ๋
Collection ์ด iterator() ๋ฉ์๋ ์ ๊ณตIterator ์ธํฐํ์ด์ค: hasNext(), next(), remove()Collection<String> c = new ArrayList<>(); // ๋๋ HashSet, LinkedList
Iterator<String> it = c.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
for-each ๋ฌธ์ ๋ด๋ถ์ ์ผ๋ก Iterator๋ฅผ ์ฌ์ฉ์๊ธฐ ์ ๊ฒ
for-each ์ Iterator์ ๊ด๊ณ๋?๋ชฉํ: 1์ฃผ์ฐจ์ NIO์์ ๋ฑ์ฅํ๋ Buffer๋ฅผ ์ข ๋ ์ผ๋ฐ์ ์ธ ๊ฐ๋ ์ผ๋ก ์ดํดํ๋ค.
์ ์ ์ง์: 1์ฃผ์ฐจ Phase 7
ํต์ฌ ๊ฐ๋
ByteBufferBufferedReader / BufferedWriter (I/O ์ฑ๋ฅ)์๊ธฐ ์ ๊ฒ
์๋ณธ ์๋ฃ: JVM ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ, p.69
main() ์ด Static Zone์ ์์ด์ผ ํ๋ ์ด์ ๋?new Model2() ํ ์ค์ด JVM์์ ํ๋ 4๊ฐ์ง๋ฅผ?#7 ๊ฐ์ ํ๊ธฐ๋ ๋ฌด์์ ์๋ฏธํ๋๊ฐ?invokespecial ๊ณผ invokevirtual ์ ์ฐจ์ด๋?for-each ์ Iterator์ ๊ด๊ณ๋?๋ฐ๋์ ๊น์ด ํ๊ธฐ (๋ฉด์ ๋จ๊ณจ + ์ค๋ฌด ์ง๊ฒฐ):
๊ธฐ๋ณธ ์ดํด๋ก ์ถฉ๋ถ:
[ ] Phase 1 โ ์๋ฐ ๋ณ์ โ ๋ฉ๋ชจ๋ฆฌ ๋งคํ (Unit 1.1~1.6)
[ ] Phase 2 โ JVM ๋ฉ์๋ ์คํ ๋ฉ์ปค๋์ฆ (Unit 2.1~2.4)
[ ] Phase 3 โ ๋ฐ์ดํธ์ฝ๋์ ์์ ํ (Unit 3.1~3.4) โ
์ ์
[ ] Phase 4 โ G1 GC ์ฌํ (Unit 4.1~4.5)
[ ] Phase 5 โ ์ปฌ๋ ์
๋ด๋ถ ๊ตฌ์กฐ (Unit 5.1~5.4)
[ ] Phase 6 โ Reflection & Iterator (Unit 6.1~6.4)
[ ] Phase 7 โ Buffer (Unit 7.1)
[ ] ์ข
ํฉ ์๊ธฐ ์ ๊ฒ 25๋ฌธํญ ํต๊ณผ
javap -c MyClass.class: ๋ฐ์ดํธ์ฝ๋ ์ฝ๊ธฐjavap -v MyClass.class: ์์ ํ๊น์ง ๋ณด๊ธฐjava -XX:+PrintGCDetails: GC ๋ก๊ทธ ํ์ธjava -XX:+UseG1GC: G1 GC ๊ฐ์ ํ์ฑํ| Phase | ILIC ์ค๋ฌด ์ฐ๊ฒฐ |
|---|---|
| 1~2 (JVM ๋ฉ๋ชจ๋ฆฌ/์คํ) | OOM ๋ถ์, heap dump ์ฝ๊ธฐ, ์ค๋ ๋ ๋คํ |
| 3 (๋ฐ์ดํธ์ฝ๋/์์ ํ) | Spring AOP ๋์ ์ดํด, ๋น๋ ์ฐ์ถ๋ฌผ ๋ถ์ |
| 4 (G1 GC) | ์ด์ ์๋ฒ GC ํ๋, GC ๋ก๊ทธ ๋ถ์ |
| 5 (์ปฌ๋ ์ ๋ด๋ถ) | DTO/Entity ์ปฌ๋ ์ ๋งคํ ์ ์๋ฃ๊ตฌ์กฐ ์ ํ |
| 6 (Reflection) | Spring DI, JPA Entity, Jackson DTO ๋งคํ ์ดํด |
| 6 (Iterator) | Stream API์ ๊ธฐ๋ฐ (3์ฃผ์ฐจ๋ก ํ์ฅ) |
| 7 (Buffer) | ํ์ผ ์ ๋ก๋ ์ฒ๋ฆฌ, NIO ํ์ฉ |