Java 프로그래밍 시 주의해야 할 점

4916 단어

01. 정적 변수를 함부로 사용하지 않도록 한다


어떤 대상이 stataic 변수로 정의되어 인용되면 gc는 이 대상이 차지하는 메모리를 회수하지 않습니다. 예를 들어:
 1: public class A{
 2:  static B b = new B();
 3:  }

이 때 정적 변수 b의 생명주기는 A클래스와 동기화되며, A클래스가 마운트 해제되지 않으면, b 대상은 프로그램이 끝날 때까지 메모리에 상주합니다.
 

02. 자바 대상을 너무 많이 만드는 것을 최대한 피한다


자주 호출되는 방법을 최대한 피하고 순환 중인 new 대상은 시스템이 대상을 만드는 데 시간을 들여야 할 뿐만 아니라 이 대상을 쓰레기 회수와 처리하는 데도 시간을 들여야 하기 때문에 우리가 통제할 수 있는 범위 내에서 최대한 대상을 중용하고 기본적인 데이터 형식이나 수조로 대상을 대체하는 것이 좋다.
 

03. 최대한 final 수식자 사용하기


final 수식자가 있는 종류는 파생할 수 없습니다.만약 하나의 종류가final이라면, 이 종류의 모든 방법은final이다.자바 컴파일러는 모든 final 방법을 인라인 (inline) 으로 연결할 수 있는 기회를 찾을 것입니다. (이것은 구체적인 컴파일러 구현과 관련이 있습니다.)이를 통해 평균 50%의 성능이 향상됩니다.
 

04. 국부 변수를 최대한 사용한다.


호출 방법을 호출할 때 전달되는 매개 변수와 호출에서 만든 임시 변수는 모두 창고(Stack)에 저장되어 속도가 비교적 빠르다.정적 변수, 인스턴스 변수 등 기타 변수는 무더기(Heap)에서 생성되며 속도가 느립니다.
 

05. 문자열 연결에 StringBuilder 및 StringBuffer 사용


그러나 사용 시에도 용량을 먼저 지정하는 것이 좋다.예를 들어 StringBuffer의 구조자는 기본 크기 (보통 16) 의 문자 그룹을 만들 것입니다.사용 중, 이 크기를 초과하면 메모리를 다시 분배하고, 더 큰 그룹을 만들고, 원래의 그룹을 복사한 다음, 오래된 그룹을 버린다.대부분의 경우 StringBuffer를 만들 때 크기를 지정하면 용량이 부족할 때 자동으로 늘어나는 것을 피하고 성능을 향상시킬 수 있습니다.
 

06. HashMap, ArrayList 등의 단일 스레드 사용


07. 최대한 합리적으로 해시맵 만들기


비교적 큰hashMap을 만들 때 다른 구조 함수인public HashMap(int initial Capacity,float load Factor)을 충분히 활용하여 HashMap이hash 재구성을 여러 번 하는 것을 피하는 것은 성능을 많이 소모하는 일이다. 기본적으로 initial Capacity는 16에 불과하지만loadFactor는 0.75이다. 얼마나 큰 용량이 필요한지 정확하게 예측하는 것이 좋다. 같은 Hashtable,Vectors도 마찬가지다.
 

08. 변수에 대한 중복 계산을 최대한 줄인다


예컨대
 1: for(int i=0; i<list.size(); i++)

마땅히
 1: forint i = 0, len = list.size(); i < len; i++)

또는
 1: forint i = list.size() - 1; i >= 0; i—)

또한 순환 중에는 복잡한 표현식을 피해야 한다. 순환 중에는 순환 조건이 반복적으로 계산되고 복잡한 표현식을 사용하지 않고 순환 조건의 값이 변하지 않으면 프로그램이 더욱 빨리 실행될 것이다.
 

09. 2차원 그룹 사용을 최대한 피한다


2차원 데이터가 차지하는 메모리 공간은 1차원 그룹보다 10배 이상 많다.
 

10.ArrayList & LinkedList


하나는 선형표, 하나는 체인표로 데이터 구조를 이해하는 사람은 어떤 차이가 있는지 알고 증상에 따라 약을 처방해야 한다.
 

11. 가능한 한 시스템을 사용하세요.통과 대신 arraycopy () 순환 복사 그룹


      System.arraycopy () 는 순환을 통해 그룹을 복제하는 것보다 훨씬 빠르다.
 

12. 위치 이동 연산


"/", "*"작업의 경우, 이동을 사용하는 작업이 더욱 빠르고 효과적입니다.
 

13. 가능한 한 빨리 무용 대상의 인용을 방출한다


대부분의 경우 방법 국부 인용 변수가 인용하는 대상은 방법이 끝나면 쓰레기가 되기 때문에 대부분의 경우 프로그램은 국부 인용 변수를 현식으로null로 설정할 필요가 없다.국부 변수가 필요하지 않을 때, 뚜렷한 설정을null로 설정할 필요가 없습니다. 방법이 실행되었을 때, 이 인용들은 자동으로 정리됩니다.하지만 다음과 같은 경우는
 1: Public void test(){
 2:  Object obj = new Object();
 3:  ……
 4:  Obj=null;
 5: // , ; , 
 6:  ……
 7:  }

이 때 obj 값을 null로 지정하여 Object 대상에 대한 인용을 가능한 한 빨리 방출할 수 있습니다.Obj=null;단지 jvm라는 대상이 이미 쓰레기가 되었음을 알려줄 뿐, 언제 회수할지는 아직 확정할 수 없습니다!
 

14. split 사용을 최대한 피한다


반드시 필요하지 않으면 split을 사용하는 것을 피해야 한다. split는 정규 표현식을 지원하기 때문에 효율이 비교적 낮다. 빈번한 수십이면 수백만 명의 호출이 대량의 자원을 소모할 것이다. 만약에 빈번한 split를 사용해야 한다면 아파치의 StringUtils를 사용하는 것을 고려할 수 있다.split (string,char), 빈번한 split의 캐시 결과입니다.
 
 

15. 자주 사용하는 대상을 최대한 캐시한다


가능한 한 자주 사용하는 대상을 캐시하고 수조나HashMap 용기를 사용하여 캐시를 할 수 있다. 그러나 이런 방식은 시스템이 너무 많은 캐시를 사용하고 성능이 떨어질 수 있기 때문에 제3자의 소스 공급 도구, 예를 들어 EhCache, Oscache를 사용하여 캐시를 할 수 있다. 그들은 기본적으로 FIFO/FLU 등 캐시 알고리즘을 실현했다.

좋은 웹페이지 즐겨찾기