Java 프로그래밍 코드 성능 최적화

4118 단어 Java성능 최적화
1. 우리가 이렇게 하는 목적:
  1.효율성(가장 중요)
  2.가독성으로 후기 유지보수에 편리하다.(똑같이 중요)
2. 코드 최적화 요구 사항:
  1.코드의 부피를 줄이다.
  2.코드의 운행 효율을 높이다.
3. 자주 사용하는 코드의 최적화:
1. 가능한 한 객체를 재사용합니다.
특히 String 객체의 재사용.가장 자주 사용하는 것은 문자열의 결합이다.
스왑 스트링이 자주 지워지는 경우StringBuilder/StringBuffer를 꼭 사용하세요.
예:

  ArrayList<String> list;
  // list 。
  StringBuilder builder = new StringBuilder(); 
  for (String s : list) {
    builder.append(s);
  }
  String result = builder.toString();

원인: 자바 가상 시스템은 대상을 생성하는 데 시간이 걸릴 뿐만 아니라 대상을 처리하고 회수하는 데도 시간이 걸리기 때문에 너무 많은 대상을 생성하면 반드시 프로그램 성능에 영향을 미칠 것이다.
  2. 가능한 한 로컬 변수를 사용합니다.
국부 변수는 창고에서 생성되며 생성 속도가 빠르고 다 사용하면 자동으로 사라지며 추가 쓰레기 회수가 필요하지 않습니다.
반면에 정적 변수, 실례 변수 등은 더미에서 만들어지고 생성 속도가 느리며 자바 쓰레기 회수 메커니즘에 의존한다.
  3. 흐름 즉시 닫기:
Java 프로그램 개발에서는 I/O, 데이터베이스 작업이 끝난 후에 흐름을 닫는 것을 기억해야 합니다.
원인: 폐쇄되지 않은 흐름은 시스템에 큰 비용을 초래하고 심지어 데이터에 심각한 결과를 초래할 수 있다.
  4. 게으름을 사용하여 로드
게으름 불러오기: 사용할 때 이 대상을 만듭니다.
예:

  String prefix = "gebi";
  if ("laowang".equals(name)) {
    list.add(prefix + name);
  }
다음으로 대체:

  if("laowang".equals(name)) {
    String prefix = "gebi";
    list.add(prefix + name);
  }

  5.순환에서try를 사용하지 않기...catch, 순환 바깥쪽에서try 사용...catch
  6.try...catch는 너무 크면 안 돼요.
쓸모없는 코드, 즉 이상한 코드를 던지지 않고 모두try에 넣지 마...catch 블록에서try 줄이기...catch 코드 블록의 크기입니다.
코드의 가독성, 유지보수성, 건장성을 보증합니다.
  7.순환 내에서 대상의 인용을 최대한 피하십시오.
특히 순환량이 많을 때

  while (i<1000) {
    Object object = new Object();
  }
다음과 같이 수정하는 것이 좋습니다.

  Object object = null;
  while (i<1000) {
    object = new Object();
new Object() 때마다 Object 객체 참조는 Object 객체를 가리킵니다.
순환 횟수가 많을 때 첫 번째와 같이 JVM은 1000개의 객체에 대한 참조를 만들고, 두 번째 메모리에는 Object 객체 참조가 하나밖에 없습니다.이렇게 하면 메모리 공간을 크게 절약할 수 있다.
  8.static 변수를 함부로 사용하지 마세요.
대상이 static 변수로 인용되었을 때, 자바 쓰레기 수거기는 이 대상이 차지하는 메모리를 정리하지 않습니다.
정적 변수가 차지하는 메모리는 이 변수가 있는 클래스가 끝날 때까지 방출됩니다.정적 변수 라이프 사이클 = 클래스 라이프 사이클입니다.
  9.사용하지 않는 대상을 만들지 마십시오. 사용하지 않는 클래스를 가져오지 마십시오.
  10.버퍼링된 입출력 흐름 사용:
버퍼링이 있는 입출력 흐름은 입출력 효율을 크게 높일 수 있다.BufferedWriter, BufferedReader, BufferedInputStream, BufferedOutputStream.
  11.패키지 클래스 데이터를 문자열로 변환하기 사용: toString
    Integer i = 1;
패키지 클래스 데이터를 문자열로 변환하는 방법 속도 순위:
       i.toString > String.valueOf(i) > ""+ i 
  12.맵 스트리밍 효율:entrySet > keySet

  //entrySet()
  for (Entry<String, String> entry : map.entrySet()) {
    String key = entry.getKey();
    String value = entry.getValue();
    System.out.println(key + " : " + value);
  }
  
  // 
  
  //keySet()
  for (String key : map.keySet()) {
  String value = map.get(key);
  System.out.println(key + " : " + value);
  } 

  13.Iterator 및 forEach () 에 대한 컬렉션은 무시됩니다.
알고리즘 도론에 따르면 알고리즘은 공간 효율과 시간 효율을 높이기 위한 것이다.그러나 왕왕 시간과 공간이 병존할 수 없다.
시간 효율: Iterator > forEach()
코드 가독성: forEach() > Iterator

  //Iterator
  Set<Entry<String, String>> entrySet = map.entrySet();
  Iterator<Entry<String, String>> iter = entrySet.iterator();
   
  while (iter.hasNext()) {
    Entry<String, String> entry = iter.next();
    String key = entry.getKey();
    String value = entry.getValue();
    System.out.println(key + " : " + value);
   } 

비교:

  //forEach()
  for (Entry<String, String> entry : map.entrySet()) {
    String key = entry.getKey();
    String value = entry.getValue();
    System.out.println(key + " : " + value);
  }

개인적으로는 빅데이터를 처리할 때 Iterator를 사용하여 컬렉션을 훑어보는 것을 추천합니다.
그러나 작은 데이터를 처리하면 가독성과 후기 유지보수를 위해 forEach () 를 사용합니다.
양자를 결합하여 사용하려면 모두 파악해야 한다.

좋은 웹페이지 즐겨찾기