Unnecessary Object

  • 불필요한 객체 생성은 성능 문제와 메모리 소비 증가로 이어질 수 있다.

원인

1. new 키워드 남용

  • 루프 또는 메소드 내 new를 남용하는 경우가 있다.

2. 불변 객체의 잘못된 사용

  • 불변 객체는 일단 생성되면 수정이 불가하다. 불변 객체를 불필요하게 생성하면 하나의 객체로 충분하지만 여러 개를 만드는 결과를 낼 수 있다.

3. 래퍼 클래스 과도한 사용

  • Integer, Double, Boolean 등 래퍼 클래스를 불필하게 사용하면 불필요한 객체가 생성된다.

4. 임시 객체 생성

  • 문자열 연결이나 구문 분석과 같은 작업을 위해서 임시 객체를 생성하는 것도 불필요한 객체 생성의 원인이 될 수 있다.

결과

  1. 메모리 사용량 증가
  2. GC Overhead
  3. 성능 저하
  4. 리소스 경합

해결

1. 객체 풀링

  • 재사용 가능한 객체 풀을 유지 관리하고 새 객체 생성 대신 필요에 따라 객체를 가져다 쓰는 식이다.

    2. 불변 객체

  • 불변객체는 여러 쓰레드에서 수정 위험 없이 공유할 수 있으므로 여러 개의 객체를 만들 필요가 없어진다.

    3. 객체 재사용

  • 최대한 이전 객체를 재사용하는 방향으로 진행할 수도 있다.

    4. 원시 데이터 타입 사용

  • 굳이 래퍼를 쓸 필요가 없으면 원시 타입을 사용한다.

    5. 객체 생성 최적화

  • new를 최소한으로 사용한다
  • 루프, 메소드 외부에서 객체 생성하면 재사용을 고려하자