Java17 [JAVA] GC - JAVA ๋ฒ์ ๋ณ ์ฃผ์ ์๊ณ ๋ฆฌ์ฆ ์ฃผ์ GC ์๊ณ ๋ฆฌ์ฆGC์ ๋์ ๋ฐฉ์๊ณผ ๋ชฉ์ ์ ๋ฐ๋ผ ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ์ด ๊ฐ๋ฐ๋์๋ค. ๊ฐ ์๊ณ ๋ฆฌ์ฆ์ Stop-the-World(STW) ์๊ฐ, ์ฒ๋ฆฌ๋(Throughput), ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋ฑ์์ ์ฅ๋จ์ ์ ๊ฐ์ง๋ค.STW๋ GC๊ฐ ์์ ์ ์ํํ๋ ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ค๋ ๋๋ฅผ ๋ชจ๋ ๋ฉ์ถ๋ ์๊ฐ์ ์๋ฏธํ๋ฉฐ, ์ด ์๊ฐ์ด ๊ธธ์๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ต์ฑ์ด ๋จ์ด์ง๋ค.์ฒ๋ฆฌ๋(Throughput)์ด๋ CPU ์๊ฐ์ GC์ ์ฌ์ฉํ๋ ์๊ฐ๋ณด๋ค ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋ ์คํ์ ์ฌ์ฉํ๋ ์๊ฐ์ ๋น์จ์ ๋์ด๋ ๊ฒ์ ์๋ฏธํ๋ค.1. Serial GCํน์ง: ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ GC ๊ตฌํ์ฒด์ด๋ค. ํ๋์ ์ค๋ ๋(Single Thread)๋ก GC ์์ ์ ์ํํ๋ค.STW: GC๊ฐ ์คํ๋๋ ๋์ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ค๋ ๋๋ฅผ ์์ ํ ์ ์ง(Stop-the-World)์ํจ.. 2025. 5. 17. [JAVA] GC - Mark & Sweep ๋์ ์๋ฆฌ ์ ์JVM (Java Virtual Machine)์์ ๊ฐ๋น์ง ์ปฌ๋ ์ (GC)์ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์๋์ผ๋ก ํด์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ํต์ฌ ๊ธฐ๋ฅ์ด๋ค.=> ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ ํ์ ์์ด, JVM์ด ์์์ ๋ถํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๋ฆฌํด์ฃผ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ๋์(Memory Leak)๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ ์ค๋ค.๊ณตํต ๊ณผ์ GC์ ๊ธฐ๋ณธ์ ์ธ ๋ฉ์ปค๋์ฆ์ ์๊ณ ๋ฆฌ์ฆ์ ์ข ๋ฅ์ ๊ด๊ณ์์ด ์ ์ฌํ๋ค.JVM ํ(Heap) ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ์ถ์ ํ์ฌ ์ด๋ค ๊ฐ์ฒด๊ฐ ์ฌ์ฉ๋๊ณ ์๋์ง(์ฐธ์กฐ๋๊ณ ์๋์ง) ํ๋จ(Mark)์ฌ์ฉ๋์ง ์๋(์ฐธ์กฐ๋์ง ์๋) ๊ฐ์ฒด๋ค์ ํ๊ธฐํ๋ ๊ณผ์ ์ด๋ค.(Sweep)1. Mark๋ชฉ์ : ํ๋ก๊ทธ๋จ์์ "์ด์์๋ ๊ฐ์ฒด(Live Object)", ์ฆ ์ฌ์ ํ ์ ํจํ ์ฐธ์กฐ๋ฅผ ํตํด ์ ๊ทผ.. 2025. 5. 17. [JAVA] ConcurrentHashMap ์๋ก ๋ฉํฐ ์ค๋ ๋๋ฅผ ํ์ฉํ ์๋น์ค ๊ฐ๋ฐ์ ํ๋ ์ค, ํด๋น ๊ฐ๋ ์ ์๊ฒ ๋์๊ณ ์ด๊ฒ ๋ฌด์์ธ์ง์ ๋ํด ์์ธํ๊ฒ ๋ค๋ฃฐ ํ์๊ฐ ์๋ค๊ณ ์๊ฐํด ์์ฑํ๋ค.์ ์ConcurrentHashMap์ Java์์ ๋์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ค๊ณ๋ ์ค๋ ๋ ์์ ํ HashMap์ด๋ค.Java 1.5๋ถํฐ java.util.concurrent ํจํค์ง์ ํฌํจ๋์ด ์์ผ๋ฉฐ, ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์ฝ๊ณ ์ธ ์ ์๋๋ก ํน๋ณํ ๋ฝ ๋ถํ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๋ค.๋ง๋ค์ด์ง ๋ฐฐ๊ฒฝ๊ธฐ์กด HashMap์ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ๋๊ธฐํ๊ฐ ๋์ด ์์ง ์์ race condition์ด ๋ฐ์ํ ์ ์์์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Hashtable์ด๋ synchronizedMap์ ์ฌ์ฉํ์ง๋ง, ์ด๋ค์ ์ ์ฒด ๋งต์ ๋ํด synchronized ์ฒ๋ฆฌ๋ฅผ ํ์ฌ ์ฑ๋ฅ ๋ณ๋ชฉ์ด ์๊น.=> ์ด๋ฅผ.. 2025. 5. 17. [JAVA] File I/O I/O ?๋ฐ์ดํฐ์ ์ ๋ ฅ(Input) ๋ฐ ์ถ๋ ฅ(Output)์ ์๋ฏธํ๋ค.๋ด๊ฐ ํค๋ณด๋๋ก ๋ฌด์ธ๊ฐ๋ฅผ ์ ๋ ฅํ๋ฉด ์ ๋ ฅ ์คํธ๋ฆผ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์ ๋ ฅ์ด ๋๊ณ , ํ๋ก๊ทธ๋จ์์ ์ถ๋ ฅ์คํธ๋ฆผ์ ํตํด ์ฝ์๋ก ์ถ๋ ฅํ๋ค.์ด๋ ํค๋ณด๋์ ์ฝ์์ ๋ ธ๋, ์ด๋ฌํ ๊ณผ์ ์ ๋ ธ๋์คํธ๋ฆผ์ด๋ผ๊ณ ์ง์นญํ๋ค.์คํธ๋ฆผ์ ๋จ๋ฐฉํฅ์ผ๋ก๋ง ํต์ ์ด ๊ฐ๋ฅํ๋ค.(ํ๋์ ์คํธ๋ฆผ์ผ๋ก ์ /์ถ๋ ฅ์ ๊ฐ์ด ํ ์ ์์) Node Stream์ ์ข ๋ฅ Input Stream(Byte)์ ๋ฉ์๋- read(): byte ํ๋๋ฅผ ์ฝ์ด์ int๋ก ๋ฐํํ๋ค. ๋ ์ฝ์ ๊ฐ์ด ์์ผ๋ฉด -1์ ๋ฆฌํดํ๋ค.- read(byte b[]): b๋งํผ ์ฝ์ด์ ์ฝ์ ๋ฐ์ดํธ ๊ฐ์๋ฅผ ๋ฆฌํด, ๋ ์ฝ์ ๊ฐ์ด ์์ผ๋ฉด 0์ ๋ฆฌํดํ๋ค.- read(byte b[], int offset, int len): len๋งํผ ๋ฐ์ด.. 2024. 7. 28. [JAVA] Exception Exception๊ณผ Error์ ์ฐจ์ด์ค๋ฅ(Error): ์์คํ ์ด ์ข ๋ฃ๋์ด์ผ ํ ์์ค์ ์ํฉ๊ณผ ๊ฐ์ด ์์ตํ ์ ์๋ ์ฌ๊ฐํ ๋ฌธ์ ๋ฅผ ์๋ฏธ์์ธ(Exception): ๊ฐ๋ฐ์๊ฐ ๊ตฌํํ ๋ก์ง์์ ๋ฐ์ํ ์ค์๋ ์ฌ์ฉ์์ ์ํฅ์ ์ํด ๋ฐ์* ์์ธ์ ๊ฒฝ์ฐ ๋ณ๋์ ์ฒ๋ฆฌ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ๋ฐฉ์งํ ์ ์๋ค. Try ~ Catchpublic static void main(String[] args) { FileInputStream is = null; try { // ์์ธ๊ฐ ๋ ๋งํ ์ฝ๋๋ฅผ try์์ญ์ ์ง์ ํ๋ค. is = new FileInputStream("number.txt"); int num = 0; System.out.println("code 1, .. 2024. 7. 28. [JAVA] Stream API Stream API???๋๋ค๋ฅผ ํ์ฉํด์ ๋ฐฐ์ด์ด๋ Collection ์๋ฃ๊ตฌ์กฐ๋ค์ ๋ธ๊น(?)ํ ์ ์๊ฒ ๋ง๋ค์ด์ฃผ๋ API๋ค.๋ฐ์ดํฐ์ CRUD๊ฐ ํ์ํ ๋, for๋ฌธ์ ์ด์ฉํ๊ฑฐ๋, Iterator๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ด ์์์ง๋ง ์ฝ๋๊ฐ ๊ธธ์ด์ง๊ณ ,ํ์ ๋ง๋ค ๋ค๋ฅด๊ฒ ๋ค๋ค์ผ ํ๋ ๋ถํธํจ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋์๋ค. ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋๋ฐ ์์ฃผ ์ฌ์ฉ๋๋ ๋ฉ์๋๋ฅผ ๋ฏธ๋ฆฌ ์ ์ํด ๋์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๋ ๋ฉ์๋๋ง ์ฃผ๋ ์ฃผ๋ ๋ฌ๋ฉด์ฝ๊ฒ ๋ค๋ฃฐ ์ ์๋ ๊ทธ๋ฐ API๊ฐ ๋์๊ฒ ๋ค. Stream์ ํน์ง- ์์ฑ - ์ค๊ฐ ์ฒ๋ฆฌ - ์ต์ข ์ฒ๋ฆฌ ์์๋ก ์ด์ด์ง๋ค.- ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ๊ฑด๋๋ฆฌ์ง ์๋๋ค. ๊ฐ ๋จ๊ณ๊ฐ ๋๋ ๋๋ง๋ค ๋ง๋ค์ด์ง ์ฒ๋ฆฌ๋ฅผ ๋ค์ ๋ฉ์๋์ ๋๊ธฐ๋ ๋ฐฉ์์ด๋ค.- ์ต์ข ์ฒ๋ฆฌ๊ฐ ๋๋๋ฉด ๋ค์ ์ค๊ฐ์ฒ๋ฆฌ๋ก ๊ฐ ์ ์๊ณ , ์ฌ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค.- ์ค๊ฐ ์ฒ๋ฆฌ๋ ์ต.. 2024. 7. 25. ์ด์ 1 2 3 ๋ค์