반응형
- try-finally 보다는 try-with-resource를 사용하라2021-03-28 22:34:25이전 글에서 말한 것 처럼 자바에서 자원을 닫아야하는 경우에 finalizer,cleaner보다는 try-finally를 쓰는 것이 전통적인 방법이다. 백기선님이 JAVA STUDY에서도 언급하셨던 내용으로 실무에서 무조건 적용하라고 하셨다..! 기존의 try-finally방식으로는 자원 한 개의 사용에서는 별 이상을 못 느낀다. 하지만 자원이 한 개 더 추가된다면? 첫 번째 예외의 finally에서도 예외가 발생할 수 있다. 이런 상황에서는 위와 같은 코드는 자원수에 따라 더 길고 지저분해질 것이다. 하지만 AutoCloseable 인터페이스를 구현한 자원을 닫아야하는 클래스를 작성하면 자바 7에서 추가된 try-with-resource를 사용할 수 있다. 이처럼 finally에서 자원을 해제 하지 않..
- finalizer와 cleaner 사용을 피하라2021-03-28 22:34:05finalizer와 cleaner 사용을 피하라 finalizer 와 cleaner는 자바에서 제공하는 두 가지 객체 소멸자로 finalizer는 deprecated되었다. finalizer는 예측할 수 없고, 상황에 따라 위험할 수 있어 일반적으로 불필요하다. cleaner는 finalizer 보다는 덜 위험하지만 , 여전히 예측할 수 없고, 느려 일반적으로 불필요하다. 자바는 gc가 특정 객체와 관련된 자원을 회수하고 비메모리 자원 또한 try-with-resource를 사용해 회수가 가능한데 finalizer와 cleaner는 객체에 접근할 수 없게 된 후 실행되기까지 얼마나 걸릴지 알 수 가 없다 즉, 제때 실행되어야 하는 작업은 절대 할 수 없다. finalizer와 cleaner의 수행 시작 ..
- 다 쓴 객체 참조를 해제하라2021-03-28 22:33:41자바의 gc가 메모리 관리를 해주기 때문에 메모리에 신경을 쓰지 않아도 된다고 생각하지만 그렇지 않다. 위의 코드에서 stack 자료구조를 구성하는 elements 참조 변수가 pop() 함수에서 최상위 데이터를 꺼낸 후 다시 쓸 일이 없는 객체의 참조가 아직 stack에 남아 있는데 이를 방치하고 프로그램을 오래 실행하면 가비지 컬렉션 활동과 메모리 사용량이 늘어 날 것이다. 또한 디스크 페이징이 일어나 OutOfMemoryError를 보게될 수 있는데 디스크 페이징이란 프로그램중 자주 사용되지 않는 부분의 작업 메모리를 주기억장치인 메모리로부터 보조기억장치인 하드디스크로 옮기는 방식을 통해, 활용 가능한 메모리 공간을 증가시키기 위한 기법 중 하나이다. 이때, 한번에 옮겨지는 메모리 용량 단위를 페이..
- 불필요한 객체 생성을 피하자2021-03-15 12:30:14같은 기능의 객체를 매번 생성하기보다는 객체 하나를 재사용하는 편이 나을 때가 많다. 재사용은 빠르고 세련되며 불변 객체는 언제든 재사용할 수 있다. 생성자 대신 정적 팩터리 메서드를 제공하는 불변 클래스에서 정적 팩터리 메서의 사용은 불필요한 객체 생성을 피할 수 있다. 생성자는 호출할 때마다 객체를 만들지만, 팩터리 메서드는 그렇지 않다. 불변 객체만이 아니라 가변 객체라 해도 사용중에 변경되지 않을 것임을 안다면 재사용할 수 있다. 생성 비용이 비싼 객체가 반복해서 필요하다면 캐싱하여 재사용하는 것이 권장된다. 문자열이 유효한 로마 숫자인지를 확인하는 정규표현식 메서드를 작성할 때 String.matches 메서드를 성능이 중요한 상황에 반복해서 사용하기엔 적합하지 않기 때문에 메서드가 내부에서 만..
반응형