반응형 분류 전체보기120 Item9 try-finally보다는 try-with-resources를 사용하라 자바 라이브러리에는 `close`메서드를 호출해 직접 닫아줘야 하는 자원이 많다 ex) `InputStream`, `OutputStream`, `java.sql.Connection` 자원을 닫는 것은 클라이언트가 놓치기 쉬워서 예측할 수 없는 성능 문제로 이어지기도 한다. 전통적으로 자원이 제대로 닫힘을 보장하는 수단으로 try-finally가 쓰였다. try-finally public static String firstLineOfFile(String path) throw IOException { BufferedReader br = new BufferedReader(new FileReader(path)); try { return br.readLine(); } finally { br.close(); } }.. 2023. 2. 2. Tomcat 재기동 시 에러 현재 우리 프로젝트 개발 환경에서 젠킨스에서 새로운 PR에 대해 Build 하고 배포를 하도록 구성되어 있으며 AWS 클라우드를 활용 중이다. 하지만 여러 사람이 프로젝트에 관여하다 보니 가끔 빌드 후 톰캣에서 에러가 발생하곤 한다..(개발 단계이고, 실제 Production에선 절! 대! 발생해선 안 되는 상황이다) 이번에 정리해보고자 하는 내용은 Tomcat 구동 시 에러로그를 확인하고, 추적하는 방법이다. 일반적인 로컬에서의 상황이 아니고 클라우드 cli에서 로그 파일을 확인해야 하므로 기록을 남겨보고자 한다. 1. Build가 성공하고 새롭게 Reload되었더니 시원하게 502 Bad Gateway를 뿌려주고 있었다. 2. Tomcat을 구동하는 AWS EC2 서버에 ssh 접속하여 확인을 해보기.. 2023. 2. 1. Item8 finalizer와 cleaner 사용을 피하라 자바는 두 가지 객체 소멸자를 제공 `finalizer` finalizer는 예측할 수 없고, 상황에 따라 위험할 수 있어 일반적으로 불필요 오동작, 낮은 성능, 이식성 문제의 원인이 되기도 함 자바 9에서는 finalizer를 deprecated API로 지정 기본적으로 `쓰지 말아야`한다 `cleaner` finalizer보다 덜 위험하다 예측할 수 없다 (언제 실행되는지) 느리고, 일반적으로 불필요 `finalizer와 cleaner의 문제점 불확실성 (수행 보장 X) 자바에서는 접근할 수 없게 된 객체를 회수하는 역할을 GC가 담당 finalizer나 cleaner를 수행할지는 적적으로 `GC 알고리즘`에 달렸고, 구현마다 천차만별 객체에 접근할 수 없게 된 후 finalizer나 cleaner가.. 2023. 1. 15. Item7 다 쓴 객체 참조를 해제하라 자바를 사용하면서 GC(가비지 컬렉터)가 있기 때문에 메모리 관리에 소홀히 한 것은 사실이다. 그런데, 자바에서도 메모리 누수가 발생할 수 있으며, 다른 언어와 마찬가지로 메모리 관리에 신경을 써야한다고 한다. 사실 자바의 컴파일 방식이나 JVM, jdk, jre, 가비지 컬렉터의 동작도 한 번 정리해보려고 한다. 백기선 님의 자바 스터디에서 정리한 글들을 본 적이 있긴 한데 꽤나 어렵고 중요한 내용들이 많았다. 아래의 코드를 보고 메모리 누수가 어디서 일어나는 지 알아보자. public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; pub.. 2023. 1. 12. 이전 1 ··· 20 21 22 23 24 25 26 ··· 30 다음 반응형