자바 volatile 예약어
엊그제 volatile[볼러타일]이라는 예약어를 처음 알게 됐다. 자바를 쓴지가 몇 년인데 아직 모르는게 많다…
왜 모르는가 생각해보니 웹 프로그램에서는 쓸 일이 없는 예약어였다. 이번에는 게임 프로그래밍 책을 읽다가 알게 됐다.
변수 앞에 volatile 을 붙이면 메인 메모리에 변수를 읽고 쓴다. 기본적으로 JMM(자바 메모리 머신)은 쓰레드 각각이 로컬 메모리를 쓰도록 만든다. volatile을 쓰면 메인 메모리 한곳을 바라보므로 안정적이다. 물론 값을 읽고 쓰는 비용은 더 높다.
게임 프로그램은 FPS(초당 프레임)가 높고 각각의 쓰레드가 끊임없이 돌아가므로 메인 메모리와 로컬 메모리의 복제의 동시성을 잃고 불일치가 일어날 수 있다. 특히 무한루프의 on/off와 관련된 변수는 volatile을 넣어주는 것 같다.