본문 바로가기
[Java Concurrency] 객체공유 [Java Concurrency] 객체공유 3.1. 가시성 - 일반적으로 특정 변수의 값을 가져갈 때 다른 스레드가 작성한 값을 가져갈 수 있다는 보장도 없고, 심지어는 값을 읽지 못 할 수도 있다. 메모리상의 공유된 변수를 여러 스레드에서 서로 사용할 수 있게 하려면 반드시 동기화 기능을 구현해야 한다. - 재배치(reordering) 현상을 조심해야 한다. 재배치 현상은 특정 메소드의 소스코드가 100% 코딩된 순서로 동작한다는 점을 보장할 수 없다는 점에 기인하는 문제이다. 단일 스레드로 동작할 때는 차이점을 전혀 알아챌 수 없지만 여러 스레드가 동시에 동작하는 경우에는 확연하게 나타날 수 있다. - 동기화 기능을 지정하지 않으면 컴파일러나 프로세서, JVM 등이 프로그램 코드가 실행되는 순서를 임.. 2017. 4. 17.
[Effective Java] 쓸모 없는 객체 참조를 제거하자. [Effective Java] 쓸모 없는 객체 참조를 제거하자. - 자바와 같이 가비지 컬렉션을 자동으로 해주는 언어는 메모리 관리를 따로 해줄 필요가 없다고 생각하기 쉬우나, 이는 틀린 생각이다. GC 의 원리에 대해 정확히 이해하고 메모리 관리를 해주어야 한다. 다만 그 메모리 관리하는 범위가 C, C++ 과 같은 GC 가 없는 언어들에 비해 더 간단할 뿐! - 자바에서도 메모리 누출(memory leak)이 쉽게 발견된다. 메모리 누수가 생기면, 성능저하의 형태로 서서히 나타난다. GC 작업이 증가하거나, 메모리 할당과 회수 횟수가 빈번해지기 때문이다. 심하면 디스크 페이징 현상이 나타나기도 하고, 아주 극단적으로는 OutOfMemoryError 가 발생한다. 메모리 누수의 무서운 점은, 특정 객체.. 2016. 1. 4.
반응형