๊ฐ๋ฐ์ผ์ง
๋นํธ์ฐ์ฐ์(Bitwise operator)๊ฐ ์ฐ์ ์ฐ์ฐ์(Arithmetic operator)๋ณด๋ค ๋ ๋น ๋ฅผ๊น? - JVM, ๋ฐ์ดํธ์ฝ๋, ์ปดํ์ผ๋ฌ ๋ณธ๋ฌธ
๋นํธ์ฐ์ฐ์(Bitwise operator)๊ฐ ์ฐ์ ์ฐ์ฐ์(Arithmetic operator)๋ณด๋ค ๋ ๋น ๋ฅผ๊น? - JVM, ๋ฐ์ดํธ์ฝ๋, ์ปดํ์ผ๋ฌ
doublejune 2024. 11. 12. 12:51์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ๋ค๊ฐ,
๋๋
answer = a / 2
๋ค๋ฅธ ์ฌ๋์ ํ์ด์์๋
answer = a >> 1
์ธ ๊ฒ์ ๋ณด์๋ค.
์๋ ์ฐ์ ์ฐ์ฐ์( / , *, +, -) ์๋๋ ๋นํธ์ฐ์ฐ์(shift, and, or, not)์ด๋ค. ๊ทธ์ค >>๋ shift ์ฐ์ฐ์์ด๋ค.
๋นํธ์ฐ์ฐ์๊ฐ ์ฐ์ ์ฐ์ฐ์๋ณด๋ค ๋ ๋น ๋ฅด๋ค๋ ๊ธ๋ค์ ๋ณด์๋๋ฐ, ์ง์ํด๋ด๋ ๊ทธ๋ด ๊ฒ ๊ฐ๋ค. ์ด์งํผ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์ฝ๋๋ ๊ธฐ๊ณ์ด๋ก ๋ณํ๋๋ค. ๊ทธ๋ฆฌ๊ณ shift๋ ๊ธฐ๊ณ์ด๊ฐ ํ ๋ฒ์(ํ ํด๋ญ์) ์คํ๊ฐ๋ฅํ ๊ฐ์ฅ ๋จ์ํ ๋ช ๋ น์ด ์ค ํ๋์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ๊ฒฐ๊ตญ ์ฐ์ ์ฐ์ฐ์ธ // ์ ์ปดํ์ผ๋ฌ๋ฅผ ํตํด ๊ฒฐ๊ตญ shift๋ก ๋ณํ๋๊ฑฐ๋, ๋ ๋ค๋ฅธ ๋จ์ํ ๋ช ๋ น์ด๋ค์ ์กฐํฉ์ผ๋ก ๊ณ์ฐ ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ๋นํธ์ฐ์ฐ์๊ฐ ๋ ๋น ๋ฅผ ๊ฒ ๊ฐ์๋ค.
A. ๊ฒฐ๋ก ์?
๋น ๋ฅผ ์๋ ์๊ณ , ๋น ๋ฅด์ง ์์ ์๋ ์๋ค.
n / d ์์,
- d์ด 2์ ๋ฐฐ์์ด๋ฉด ๋นํธ์ฐ์ฐ์๊ฐ ๋น ๋ฅธ ๊ฒ์ด ๋ง๋ค. ํ์ง๋ง ์ฐ์ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ์ปดํ์ผ๋ฌ๊ฐ Optimization์ ์งํํ๋ฉฐ shfit์ฐ์ฐ์๋ก ๋ณํํ๊ธฐ ๋๋ฌธ์, ๊ฑฐ์ ์ฐจ์ด๊ฐ ๋์ง ์๋๋ค๊ณ ๋ณด๋๊ฒ ๋ง๋ค. *๊ทธ๋ฌ๋ ์๋ฒ ๋๋ ํ๊ฒฝ์์ ์ ํ๋ ๋ฉ๋ชจ๋ฆฌ์์ ์ฝ๋ฉํ ๋๋ ์ ์๋ฏธํ ์ฐจ์ด๊ฐ ๋ ์ ์๋ค.
- d๊ฐ 2์ ๋ฐฐ์๊ฐ ์๋๋ผ๋ฉด ๋นํธ์ฐ์ฐ์๊ฐ ๋น ๋ฅธ ๊ฒ์ด ์๋๋ค. 2์ ๋ฐฐ์๊ฐ ์๋๋ผ๋ฉด shift์ฐ์ฐ์ด ๋ถ๊ฐํ๊ณ , ๊ณฑ์ ๊ณผ ๋นผ๊ธฐ์ ๋ฐ๋ณต์ผ๋ก ๋ ๋ณต์กํ ์ฐ์ฐ์ด ํ์ํ๋ค. ๋นํธ์ฐ์ฐ์๊ฐ ์ด ๋ณต์กํ ์ฐ์ฐ์์ ๋ ๋น ๋ฅผ๊ฒ์ด๋ผ๊ณ ๋ณด์ฅํ ์ ์๋ค.
๊ณ ๋ก, ์ ํ๋ ํ๊ฒฝ์์ low level ์ธ์ด๋ก ์ฝ๋ฉํ๋๊ฒ ์๋๋ผ๋ฉด ๊ตณ์ด ๋ ผ๋ฆฌ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ ค ํ ํ์๊ฐ ์๋ค.
B. ์๋๋ฉด
(1) Javaํ์ผ์ด ๊ธฐ๊ณ์ด๋ก ๋ณํ๋๋๊ณผ์
๊ฒฐ๋ก ์ ์ดํดํ๊ธฐ ์ํด, ์ฐ์ ์ฝ๋๊ฐ ์ด๋ป๊ฒ ๊ธฐ๊ณ์ด๋ก ๋ณํ๋๋์ง ๋ณด์.
์๋ฐ๋ฅผ ์๋ก๋ค์ด
.java ํ์ผ์ .class(๋ฐ์ดํธ์ฝ๋)๋ก ๋ฐ๋๊ณ , JVM์ ํตํด ๊ธฐ๊ณ์ด๋ก ๋ณํ๋๋ค.
- ์๋ฐ ์ปดํ์ผ๋ฌ: javaํ์ผ์ ๋ฐ์ดํธ์ฝ๋๋ก ๋ณํ
- JVM : ๋ฐ์ดํธ์ฝ๋๋ฅผ OS์ ๋ง๋ ๊ธฐ๊ณ์ด๋ก ๋ณํํ๋ค./ ๊ฐ๋น์ง ์ฝ๋ ํฐ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌํ๋ค. ๋๋ถ์ OS์ ๋ํด์ ๋ ๋ฆฝ์ ์ด๋ค. ์ปดํจํฐ์์๋ ํ๋ก๊ทธ๋จ์ ์คํํ๋ ๊ฒ์ด ์๋ ์ธํฐํ์ด์ค ์ญํ ์ ํ๋ JVM์ ํตํด ์คํํ๋ค.
๊ฒฐ๊ตญ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์ฝ๋๋ ๊ธฐ๊ณ์ด๋ก ๋ณํ๋๋ค.
์ด ๊ณผ์ ์์ ์ปดํ์ผ๋ฌ๋ ์ฝ๋๋ฅผ ๋ณํํจ๊ณผ ๋์์ Optimization(์ต์ ํ)๋ฅผ ํ๊ฒ ๋๋๋ฐ, ๊ทธ ๋ ๋นํธ์ฐ์ฐ์ผ๋ก ๋ณํ ๋ ์ ์๋ ์ฐ์ ์ฐ์ฐ๊ฐ์ ๊ฒฝ์ฐ์๋ ๋ณํ๋๋ค.
์ปดํ์ผ๋ฌ๊ฐ ์ต์ ํ๋ฅผ ํด์ฃผ๊ธฐ ๋๋ฌธ์, ์ ํ๋ ํ๊ฒฝ(๋ฉ๋ชจ๋ฆฌ ์ ์ฝ ๋ฑ)์์์ low-level์ธ์ด ์ฝ๋ ์์ฑ์ด ์๋๋ผ๋ฉด ๊ตณ์ด ๋นํธ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์๋ค.
(2) ๊ฐ์ด 2์ ๋ฐฐ์์ผ ๋, ์๋ ๋
bit ๋ 0๊ณผ 1์ ๊ฐ๋ง์ ๊ฐ์ง ์ ์๋ 2์ง์์ด๋ค. ๋นํธ์ฐ์ฐ์ shift(์๋ฆฟ์ ์ค๋ฅธ์ชฝ ์ด๋, ์ผ์ชฝ ์ด๋)
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ n / d ์ ๊ฒฝ์ฐ, d๊ฐ 2์๋ฐฐ์๊ฐ ์๋๋ผ๋ฉด, shift ๊ฐ ์๋๋ผ
ex) 10 / 3
=>
10 - 3 = 7
7 - 3 = 4
4 - 3 = 1
3๋ฒ ๋บ์ผ๋ฏ๋ก ๋ชซ์ 3, ๋๋จธ์ง ๊ฐ์ 1
๊ณผ ๊ฐ์ด ๋ฐ๋ณต๋๋ ๋นผ๊ธฐ์ ๋ํ๊ธฐ๋ก ์ฐ์ฐํด์ผํ๋ค.
์ด ๊ฒฝ์ฐ ๋นํธ์ฐ์ฐ์๊ฐ ์ฐ์ ์ฐ์ฐ์๋ณด๋ค ๋ ๋ซ์ง ์๋ค.
C. ๋ ์์๋ณผ ๋ด์ฉ
- ์๋ฐ ์ธํฐํ๋ฆฌํฐ์ JIT๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง
- Runtime Data Areas ์์ ์ด๋ป๊ฒ ๋์ํ๋
์ฐธ์กฐ
๋ฐ์ดํธ ์ฝ๋๋ฅผ ์ฝ๋ ๋ฐฉ์
.java ์ฝ๋๋ฅผ ์๋ฐ ์ปดํ์ผ๋ฌ(Javac)๊ฐ ์ปดํ์ผ ํ๊ฒ๋๋ฉด .Class ํํ์ ํ์ผ์ ์์ฑํ๋๋ฐ, ์ด .Class ํ์ผ๋ก ๋ ์ฝ๋๋ฅผ ๋ฐ์ดํธ ์ฝ๋๋ผ๊ณ ํจ์ฝ๊ฒ ๋งํ๋ฉด, JVM์ด ์ดํดํ ์ ์๋ ์ธ์ด๋ก ๋ณํ๋ ์๋ฐ ์์ค
velog.io
https://www.happykoo.net/@happykoo/posts/242
ํดํผ์ฟ ๋ธ๋ก๊ทธ - [Java] ์๋ฐ์ฝ๋๊ฐ ์คํ๋๋ ๊ณผ์ ์ ๋ํด ์์๋ณด์
๋๊ตฌ๋ ์์ฝ๊ฒ ์ด์ํ๋ ๋ธ๋ก๊ทธ!
www.happykoo.net
'Backend๐งฑ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] Arrays.sort()๊ฐ ์๋ํ๋ ๋ฐฉ์ (1) | 2024.11.20 |
---|---|
[JAVA] List<String> copy = new ArrayList<>(original); ์ด Shallow Copy์ธ ์ด์ (4) | 2024.11.14 |