Java EE 개발자는 항상 -server 옵션을 켜 두는 것이 좋다.

요즘 읽고 있는 자바 병렬 프로그래밍 책의 74쪽 주석에 나오는 글이다.

JVM에 -server 옵션을 지정하면 일반적인 상태(client 상태)보다 더 많은 최적화 방법을 동원하는데, 예를 들어 반복문 내부에서 전혀 값이 바꾸지 않는 내용을 반복문 밖으로 빼내는 등의 최적화 작업이 일어난다. 따라서 -server 옵션을 지정하지 않은 상태로 개발이나 테스트 과정을 진행하고 실 서버에 적용할 때에만 -server 옵션을 지정하면, 프로그램이 예상했던 대로 작동하지 않을 가능성이 있다.

여기 나온대로 개발자는 항상 운영 환경과 동일한 VM 설정을 해야한다.
같은 Java 코드라도 -server 냐 -client 냐에 따라 최적화 방식이 달라지고 코드가 다르게 작동한다.

이와 같은 현상에 대해 Effective Java 2nd ed. Item 66 에서도 다루고 있다. -client와 -server 옵션에 따라 코드의 해석이 달라지고 행동도 달라진다.

따라서 되도록 테스트 WAS를 띄울때 -server 옵션을 주고 띄워야 한다. (운영 서버는 항상 -server로 띄워야 실행시 최적화가 된다. -client는 실행시 최적화보다는 로딩 시간 최적화를 한 것이다.)

참고 : Java HotSpot FAQ : I would like java to default to -server. I have a lot of scripts which I cannot change (or do not want to change). Is there any way to do this?
기본적으로 항상 -server 모드로 뜨는 운영체제와 시스템들 for Java 5 : Linux 64bit의 경우 항상 -server 모드로 뜬다.

이 글과 관련있는 글을 자동검색한 결과입니다 [?]

by 권남 | 2009/08/19 13:34 | 프로그래밍 | 트랙백 | 덧글(4)

트랙백 주소 : http://kwon37xi.egloos.com/tb/4214739
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 곰돌이 at 2009/09/15 22:08
죄송하지만 윈도우에서 톰켓이 -server 모드로 떠 있는지를 확인하려면 어떻게 해야 하는지요?
Commented by 곰돌이 at 2009/09/15 22:12
한가지 더 여쭤보겠습니다. 개발환경에서 -server 옵션을 켜두라고 하셨는데 eclipse 실행 시에 eclipse.ini에도 -server 옵션을 추가해야 하는지요? 개발 환경에서 -server 옵션을 켜야 한다면 어떤 환경을 만들어야 하는지 알려주시면 감사하겠습니다. 아니면 참고할 만한 문서 또는 사이트를 알려주시면 재가 찾아 보겠습니다. 감사합니다.
Commented by 권남 at 2009/09/16 14:56
//곰돌이 -server 모드로 떴는지 여부를 검사하는 방법은 저도 모르겠습니다. 윈도우에서는 서버급이 아닌이상 거의 client 모드로 뜹니다.

이클립스는, 이클립스를 -server로 띄우는 것이 아니라 이클립스 내부에서 실행되는 톰캣을 -server로 띄우는 것입니다. 톰캣을 실행하는 JVM옵션은 일단 톰캣을 한 번 띄운뒤에 이클립스의 Run 메뉴에서 해당 실행 설정을 찾아서 JVM Option에 -server를 붙여주시면 됩니다.
Commented by 곰돌이 at 2009/09/17 13:04
감사합니다. 많은 도움 되었습니다.

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶