๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

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.