1. 긴 메서드 작성을 지양하자
클래스 로딩과 메소드 호출 시 스택 메모리에 메소드를 로드하기 때문에
처리량이 너무 많아 메서드가 크면 실행을 위해 메모리와 CPU 주기를 소비합니다
메서드는 너무 길면 안 되며 단일 기능을 수행하도록 해야 합니다.
2. 여러 If-else 문을 피하자
조건문을 남용해서는 안 됩니다.
조건부 if-else 문을 너무 많이 사용하면 JVM이 조건을 비교해야 하므로
성능에 영향을 미칩니다.
for, while 등과 같은 반복문에서 동일한 조건을 사용하면 상황이 악화될 수 있습니다.
능하면 여러 if-else 대신 switch 문을 사용하는 것도 생각할 수 있습니다.
Switch 문은 if – else보다 성능상의 이점이 있습니다.
https://jerry92k.tistory.com/51
https://jerry92k.tistory.com/54
3. 반복문에서 크기를 가져오는 것을 지양하자
지양코드
List<String> objList = getData();
for (int i = 0; i < objList.size(); i++) { 코드 실행 ..}
// objList.size() <- 부분에서 지속적으로 호출한다.
// 만일 사이즈가 어마어마하게 크다면 호출횟수를 생각해보자 정말 아찔하다.
위 코드를 최대한 피하여 다음과 같이 작성하자
지향코드
List<String> objList = getData();
int size = objList.size(); // <- 반복문에서 호출하지 않으므로 여러번 호출하지 않는다!
for (int i = 0; i < size; i++) { execute code ..}
https://junghyungil.tistory.com/65
https://yeon-kr.tistory.com/158
4. '+' 연산자로 문자열을 연결하지말자
'+' 연산자를 사용하여 문자열 개체를 연결하면 자바의 String 객체들은 불변하기 때문에
'+' 연산자를 사용하면 연결된 값으로 새 String 개체가 생성되며,
이로 인해 여러 String 개체가 생성되고
힙에 저장되어 메모리 사용량이 증가하게 만듭니다
이 경우 StringBuilder 또는 StringBuffer를 사용하면 성능의 이점이 있다.
지양코드
String query = String1+String2+String3;
위 코드를 최대한 피하여 다음과 같이 작성하자
지향코드
StringBuilder strBuilder = new StringBuilder(“”);
strBuilder.append(String1).append(String2).append(String3);
String query = strBuilder.toString();
5. 가능하면 원시타입(Primitive Types)을 지향하자
원시타입은 stack영역에 있고 참조 유형은 heap영역에 있습니다.
스택 메모리가 힙보다 액세스 속도가 훨씬 빠릅니다.
또한 Boxing overhead가 상당합니다.
원시타입을 쓰는 것이 성능의 이점이 있습니다.
https://www.baeldung.com/java-primitives-vs-objects
https://alammori.com/benchmarks/primitive-vs-boxed-performance
+ 가끔 다른 블로그 글을 읽다 보면
Java 1.5 이후 성능 이슈가 해결되어 '+'연산자를 사용해도
문제없다는 말이 보입니다. 사실 이는 이율배반입니다.
Java 1.5 이후 관련 로직을 수정한 게 아닌
StringBuilder 클래스를 도입하여 heap에 여러 개체를 만들지 않고도
String 개체를 연결할 수 있는 효율적인 방법을 제공한다는 의미에서
성능 문제가 해결되었다는 의미였기 때문입니다.
'As a developer > To kill time' 카테고리의 다른 글
프롬프트 엔지니어란? (적합한 사람 및 전망) (0) | 2023.03.18 |
---|---|
Chat GPT와 new bing 비교해보기 (0) | 2023.03.18 |
🚀개발자도 알아야 하는 마이크로서비스 아키텍처(MSA) (0) | 2023.03.04 |
ChatGPT의 탈옥방법 DAN + AI가 알려준 한국 주식 미래 (0) | 2023.02.18 |
[JAVA] 가위바위보 승률 프로그램 1억 번 반복 + 논문 (1) | 2023.02.09 |