Threads
์ค๋ ๋๋ ํ๋ก๊ทธ๋จ์์ ์คํ๋๋ ์ค๋ ๋์ ๋๋ค. JVM์ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์์ ์คํ๋๋ ์ฌ๋ฌ ์คํ ์ค๋ ๋๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. Hotspot JVM์๋ Java ์ค๋ ๋์ ๊ธฐ๋ณธ ์ด์ ์ฒด์ ์ค๋ ๋ ๊ฐ์ ์ง์ ๋งคํ์ด ์์ต๋๋ค. Thread-local storage, allocation buffers, synchronization objects, stacks ๋ฐ program counter์ native thread๊ฐ ์์ฑ๋ฉ๋๋ค. The native thread๋ Java thread๊ฐ ์ข ๋ฃ๋๋ฉด ํ์๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ด์ ์ฒด์ ๋ ๋ชจ๋ thread๋ฅผ schedulingํ๊ณ ์ฌ์ฉ ๊ฐ๋ฅํ CPU๋ก ๋ณด๋ด๋ ์ฑ ์์ด ์๋ค. The native thread๊ฐ ์ด๊ธฐํ๋๋ฉด Java thread์์ run() ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค. run() ๋ฉ์๋๊ฐ ๋ฐํ๋๋ฉด ํฌ์ฐฉ๋์ง ์์ ์์ธ๊ฐ ์ฒ๋ฆฌ๋๊ณ native thread๋ thread ์ข ๋ฃ์ ๊ฒฐ๊ณผ๋ก JVM์ ์ข ๋ฃํด์ผ ํ๋์ง ํ์ธํฉ๋๋ค(์ฆ, ๋ง์ง๋ง non-deamon thread์ธ์ง). Thread๊ฐ ์ข ๋ฃ๋๋ฉด native thread์ Java thread ๋ชจ๋์ ๋ํ ๋ชจ๋ ๋ฆฌ์์ค๊ฐ ํด์ ๋ฉ๋๋ค.
JVM System Threads
jconsole ํน์ any debugger๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ ์ค์ธ ์๋ง์ threads๊ฐ ์์์ ์ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ฐฑ๊ทธ๋ผ์ด๋ threads๋ purblic static void main(String[])
ํธ์ถํ part๋ก ์์ฑ๋๋ main thread ๋ฐ main thread์ ์ํด ์์ฑ๋ ๋ชจ๋ thread์ ํจ๊ป ์คํ๋ฉ๋๋ค. Hotspot JVM์ ๊ธฐ๋ณธ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์คํ
์ค๋ ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
VM thread
์ด ์ค๋ ๋๋ JVM์ด safe-point์ ๋๋ฌํด์ผ ํ๋ ์์ ์ด ๋ํ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค. ์ด๋ฌํ ์์ ์ด ๋ณ๋์ thread์์ ๋ฐ์ํด์ผ ํ๋ ์ด์ ๋ ๋ชจ๋ ์์ ์ด JVM์ด heap์ ๋ํ ์์ ์ด ๋ฐ์ํ ์ ์๋ safe point์ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด ์ค๋ ๋๊ฐ ์ํํ๋ ์์ ์ ํ์ "stop-the-world" ์ด ์ค๋ ๋๋ ์ฃผ๊ธฐ์ ์์ ์ ์คํ์ scheduleํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํ์ด๋จธ ์ด๋ฒคํธ(์: ์ธํฐ๋ฝํธ)๋ฅผ ๋ด๋นํฉ๋๋ค.garbage collections, thread stack dumps, thread suspension ๋ฐ biased locking revocation์ ๋๋ค.
Periodic task thread
์ด ์ค๋ ๋๋ ์ฃผ๊ธฐ์ ์์ ์ ์คํ์ scheduleํ๋ ๋ฐ ์ฌ์ฉ๋๋ timer events(์: interrupts)๋ฅผ ๋ด๋นํฉ๋๋ค.
GC thread
์ด๋ฌํ ์ค๋ ๋๋ JVM์์ ๋ฐ์ํ๋ ๋ค์ํ ์ ํ์ garbage collection ํ๋์ ์ง์ํฉ๋๋ค.
Compiler threads
์ด๋ฌํ ์ค๋ ๋๋ ๋ฐํ์์ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ์ปดํ์ผํฉ๋๋ค.
Signal dispatcher thread
์ด ์ค๋ ๋๋ JVM ํ๋ก์ธ์ค๋ก ์ ์ก๋ ์ ํธ๋ฅผ ์์ ํ๊ณ ์ ์ ํ JVM ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ JVM ๋ด๋ถ์์ ์ ํธ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
Per Thread
๊ฐ ์คํ ์ค๋ ๋์๋ ๋ค์ ๊ตฌ์ฑ ์์๊ฐ ์์ต๋๋ค.
Program Counter (PC)
๊ธฐ๋ณธ ๋ช ๋ น์ด๊ฐ ์๋ ๊ฒฝ์ฐ ํ์ฌ ๋ช ๋ น์ด(๋๋ opcode)์ ์ฃผ์์ด๋ค. ํ์ฌ ๋ฉ์๋๊ฐ natice์ผ ๋ PC๋ ์ ์๋์ง ์์ต๋๋ค. ๋ชจ๋ CPUs์๋ PC๊ฐ ์์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก PC๋ ๊ฐ ๋ช ๋ น ํ์ ์ฆ๊ฐํ๋ฏ๋ก ์คํํ ๋ค์ ๋ช ๋ น์ ์ฃผ์๋ฅผ ๋ณด์ ํฉ๋๋ค. JVM์ PC๋ฅผ ์ฌ์ฉํ์ฌ ๋ช ๋ น์ ์คํํ๋ ์์น๋ฅผ ์ถ์ ํ๋ฉฐ PC๋ ์ค์ ๋ก ๋ฉ์๋ ์์ญ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
Stack
๊ฐ ์ค๋ ๋์๋ ํด๋น ์ค๋ ๋์์ ์คํ๋๋ ๊ฐ ๋ฉ์๋์ ๋ํ frame์ ๋ณด์ ํ๋ ์์ฒด stack์ด ์์ต๋๋ค. Stack์ LIFO(Last In First Out) ๋ฐ์ดํฐ ๊ตฌ์กฐ์ด๋ฏ๋ก ํ์ ์คํ ์ค์ธ ๋ฉ์๋๊ฐ stack์ ๋งจ ์์ ์์ต๋๋ค. ๋ชจ๋ ๋ฉ์๋ ํธ์ถ์ ๋ํด ์ frame์ด ์์ฑ๋๊ณ stack ๋งจ ์์ ์ถ๊ฐ(ํธ์)๋ฉ๋๋ค. ๋ฉ์๋๊ฐ ์ ์์ ์ผ๋ก ๋ฐํ๋๊ฑฐ๋ ๋ฉ์๋ ํธ์ถ ์ค์ ํฌ์ฐฉ๋์ง ์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด frame์ด ์ ๊ฑฐ(ํ)๋ฉ๋๋ค. stack์ frame ๊ฐ์ฒด๋ฅผ ํธ์ํ๊ณ ํํ๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ ์ง์ ์กฐ์๋์ง ์์ผ๋ฏ๋ก frame ๊ฐ์ฒด๋ heap์ ํ ๋น๋ ์ ์์ผ๋ฉฐ ๋ฉ๋ชจ๋ฆฌ๋ ์ฐ์์ ์ผ ํ์๊ฐ ์์ต๋๋ค.
Native Stack
๋ชจ๋ JVM์ด native ๋ฉ์๋๋ฅผ ์ง์ํ๋ ๊ฒ์ ์๋์ง๋ง ์ผ๋ฐ์ ์ผ๋ก thread ๋ณ native ๋ฉ์๋ ์คํ์ ์์ฑํฉ๋๋ค. JVM์ด JNI(Java Native Invocation)์ฉ C-linkage ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ๊ตฌํ๋ ๊ฒฝ์ฐ native stack์ C stack์ด ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ ์ธ์ ๋ฐ ๋ฐํ ๊ฐ์ ์์๋ ์ผ๋ฐ์ ์ธ C ํ๋ก๊ทธ๋จ์ native stack๊ณผ ๋์ผํฉ๋๋ค. Native ๋ฉ์๋๋ ์ผ๋ฐ์ ์ผ๋ก(JVM ๊ตฌํ์ ๋ฐ๋ผ) JVM์ผ๋ก ๋ค์ ํธ์ถํ๊ณ Java ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค. ์ด๋ฌํ native Java ํธ์ถ์ stack(์ผ๋ฐ Java ์คํ)์์ ๋ฐ์ํฉ๋๋ค. Thread๋ native stack์ ๋ ๋ stack(์ผ๋ฐ Java ์คํ)์ ์ frame์ ์์ฑํฉ๋๋ค.
Stack Restrictions
Stack์ ๋์ ๋๋ ๊ณ ์ ํฌ๊ธฐ์ผ ์ ์์ต๋๋ค.Thread์ ํ์ฉ๋ ๊ฒ๋ณด๋ค ๋ ํฐ stack ํ์ํ ๊ฒฝ์ฐ StackOverflowError๊ฐ ๋ฐ์ํฉ๋๋ค. Thread์ ์ frame์ด ํ์ํ๊ณ ์ด๋ฅผ ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ถฉ๋ถํ์ง ์์ผ๋ฉด OutOfMemoryError๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ชจ๋ ๋ฉ์๋ ํธ์ถ์ ๋ํด ์ frame์ด ์์ฑ๋๊ณ stack ๋งจ ์์ ์ถ๊ฐ(ํธ์)๋ฉ๋๋ค. ๋ฉ์๋๊ฐ ์ ์์ ์ผ๋ก ๋ฐํ๋๊ฑฐ๋ ๋ฉ์๋ ํธ์ถ ์ค์ ํฌ์ฐฉ๋์ง ์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด frame์ด ์ ๊ฑฐ(ํ)๋ฉ๋๋ค. ์์ธ ์ฒ๋ฆฌ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์๋ ์์ธ ํ ์ด๋ธ ์น์ ์ ์ฐธ์กฐํ์ธ์.
Last updated
Was this helpful?