Programming/Java

반응형

Stream anyMatch() vs filter.count > 0 성능 비교

개요

Java에서 스트림으로 작업할 때 조건자 or 기준과 일치하는 항목이 하나 이상 있는지 확인하는 로직을 작성할 때가 있습니다.
anyMatch()와 filter().count > 0 Stream API는 동일한 처리를 하지만 anyMatch()를 사용하는 것이 더 안전하고 성능상에 장점이 있는데 그 차이점에 대해 알아보고자 합니다.

차이점

가장 큰 차이점은 anyMatch()의 경우 Stream 요소에 일치하는 첫번째 항목이 존재하면, Stream을 중지하고 결과를 반환하게 됩니다.
반면에 count()의 경우는 모든 Stream 요소를 순회하고 그 결과인 count를 반환하게 됩니다.

Stream 요소가 작을 경우는 큰 차이가 없겠지만, Stream의 요소가 크면 클수록 성능상에 영향을 미칠 수 있습니다.

Code

일치하는 요소가 존재하면 Stream 종료
return component.getContents()
                .stream()
                .anyMatch(x -> "v1000".contains(x.getContentsCode())) ? "Y" : "N";
Contents Size까지 스트림 순회하고 count 반환
return component.getContents()
                .stream()
                .filter(x -> "v1000".contains(x.getContentsCode()))
                .count() > 0 ? "Y" : "N";
반응형
반응형
JSTAT GC 메모리 관리

자바에서 메모리 관리의 효율성을 위해 제공하는 Tool

Young 영역

Eden 영역에는 신규 객체들이 보관되고, 100% 차게되면 사용하지 않는 객체는 제거되고, 사용되는 객체는 Survivor 0으로 승격(miner gc 수행), S0에서 사용하지 않는 객체 제거 및 사용되는 객체 Survivor 1영역으로 승격(miner gc 수행) 됨. 이 작업이 반복되면서 살아 남은 객체는 Old 영역으로 승격됨. (miner gc 수행 중에는 JVM STW 발생하지 않음)

Old 영역

Eden 영역에서 승격된 객체들이 보관되다가 Old 영역이 100% 되면 major gc 가 발생한다. JVM STW 가 되면서 Old 영역의 메모리를 정리하게 되는데, 이때 major gc 처리 시간을 줄이는 것이 중요함( 1초 미만을 권장하고, 시간에 따라 gc 튜닝이 필요할 수도 있음)

jstat gc memory check

  • jstat 옵션
    • gc: gc 힙의 통계 정보를 출력
    • gccapacity: 힙의 용량 정보를 출력
    • gcutil: gc 통계 정보를 출력
    • gcnew: new 영역의 정보 출력
    • gccause: gc 통계 정보와 gc 발생 원인 출력
  • jstat 예시
    • jstat [옵션] [PID] [반복 출력 시간]

  • S0: S0 영역 사용율
  • S1: S1 영역 사용율
  • E: Eden 영역 사용율
  • O: Old 영역 사용율
  • CCS: compressed class space 영역 사용율
  • YGC: young 영역 gc count
  • FGC: full gc count(major gc)
  • FGCT: full gc count time (소요 시간)
  • GCT: gc 전체 소요시간 (ygct + fgct)
반응형

[Java] Collection sort

2016. 1. 7. 17:47
반응형
  • JAVA Sort, ArraySort
import java.util.ArrayList;
import java.util.Collections;

public class MainClass{
  public static void main(String[] args) {
    
    String[] stringArray = new String[]{"c","e","a","k"};
    List<string> list = Arrays.asList(stringArray );
    //ArrayList<string> list = new ArrayList<string>();
    
    for(String s: stringArray){
      list.add(s);
    }

    Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
    
    for (String s: list) {
      System.out.println(s);
    }
  }
}


public class ArraySort {
    public static void main(String[] args) {
 
        String[] s = { "b", "A", "D", "C", "a", "F" };
 
        // 대소문자 구분 정렬
        Arrays.sort(s);
        System.out.println("==&gt; 대소문자 구분");
        System.out.println(Arrays.toString(s)); //[A, C, D, F, a, b] 
 
        // 역순정렬
        descArraySort(s);
        System.out.println("==&gt; 역순정렬 ");
        System.out.println(Arrays.toString(s)); //[b, a, F, D, C, A] 
 
        // 대소문자 구분 없이 정렬
        System.out.println("==&gt; 대소문자 구분 없이 ");  
        Arrays.sort(s, String.CASE_INSENSITIVE_ORDER);
        System.out.println(Arrays.toString(s)); //[a, A, b, C, D, F]
 
    }
 
    public static void descArraySort(String[] arr) {
        String temp;
 
        for (int i = 0; i &lt; arr.length / 2; i++) {
            temp = arr[i];
            arr[i] = arr[(arr.length - 1) - i];
            arr[(arr.length - 1) - i] = temp;
        }
    }
}

 

반응형

[Java] GMT/UTC 날짜 변환

2015. 4. 8. 15:30
반응형
GMT/UTC 표준 시간 변환

글로벌 프로젝트 중 PG사로부터 결제완료 일자를 아래와 같은 생소한 format 으로 리턴 받은적이 있는데 컨버트 과정을 거쳐 해결함.

  • Response date : 31/3/2015 4:44:30 PM
  • Malay : GMT +8
  • Korea : GMT +9 
/* 작성일 : 2013.11.27
 * 내 용 : GMT/UTC 일시 변환
 */
public void getConvert(ParameterMap parameterMap) throws Exception {
    //31/3/2015 4:01:59 PM ---> yyyy-MM-dd HH:mm:ss 변환
    logger.debug("TIMES " + convertToDate("31/3/2015 4:44:30 PM"));
    logger.debug("TIMES " + utcToLocaltime(convertToDate("31/3/2015 4:44:30 PM")));
}

/* convertToDate
 * @param datetime
 * SimpleDateFormat("yyyy-MM-dd HH:mm:ss") HH 대문자 : 24 Hour
 * 소문자 : 12 Hour  
 */
public static String convertToDate(String inputDate) throws Exception{
    String dateTime = inputDate;
    SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss a", Locale.US);
    Date parseDate = null;
    String convertedDate = null;
	 
    try {
        parseDate = format.parse(dateTime);
        DateFormat dateFormatNeeded = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        convertedDate = dateFormatNeeded.format(parseDate);  
    } catch (ParseException e) {
        logger.error("error " + e);
        throw new Exception(e);
    }
	
    return convertedDate;
}


/* UTC time to local time
 */
public static String utcToLocaltime(String datetime) throws Exception {
    String locTime = null;
    //TimeZone tz = TimeZone.getTimeZone("GMT+08:00"); 해당 국가 일시 확인 할 때, 한쿸은 +9
    TimeZone tz = TimeZone.getDefault();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
	
    try {
        Date parseDate = sdf.parse(datetime);
        long milliseconds = parseDate.getTime();
        int offset = tz.getOffset(milliseconds);
        locTime = sdf.format(milliseconds + offset);
        locTime = locTime.replace("+0000", "");
    } catch(Exception e) {
        e.printStackTrace();
        throw new Exception(e);
    }
	
    return locTime;
}
 
/**
 * local time to UTC time
 */
public static String localtimeToUTC(String inputdatetime) throws Exception {
    String utcTime = null;
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    TimeZone tz = TimeZone.getDefault();
	 
    try {
        Date parseDate = sdf.parse(inputdatetime);
        long milliseconds = parseDate.getTime();
        int offset = tz.getOffset(milliseconds);
        utcTime = sdf.format(milliseconds - offset);
        utcTime = utcTime.replace("+0000", "");
    } catch (Exception e) {
        e.printStackTrace();
        throw new Exception(e);
    }
	 
    return utcTime;
}
반응형
반응형

 

정상적으로 실행되던 톰켓에서 아래와 같은 오류를 뱉어 낼 경우가 간혼 있다.

Setting property 'source' to 'org.eclipse.jst.jee.server:프로젝트명' did not find a matching property.

그럴 경우 톰캣 설정에 Server Option 탭에 아래와 같은 설정 후 재기동.

 


 


반응형

'Programming > Java' 카테고리의 다른 글

[Java] Collection sort  (0) 2016.01.07
[Java] GMT/UTC 날짜 변환  (1) 2015.04.08
올바른 eqals() 사용법  (0) 2014.02.07
[Java] split 문자열 나누기  (0) 2014.02.05
java e.printStackTrace 로그 남기기  (0) 2014.01.17

+ Recent posts

반응형