Programming
-
[Java] Heap Memory 체크 (JSTAT)2021.03.29
-
[Java] Collection sort2016.01.07
-
장바구니 주문금액 재계산 스크립트2015.04.06
-
[jQuery] multi element each2015.03.31
[Java] Heap Memory 체크 (JSTAT)
2021. 3. 29. 17:30
반응형
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)
반응형
'Programming > Java' 카테고리의 다른 글
[Java Stream] anyMatch() vs filter().count > 0 성능 비교 (0) | 2023.06.12 |
---|---|
[Java] Collection sort (0) | 2016.01.07 |
[Java] GMT/UTC 날짜 변환 (1) | 2015.04.08 |
[오류]Setting property 'source' to 'org.eclipse.jst.jee.server:프로젝트명' did not find a matching property (0) | 2014.04.08 |
올바른 eqals() 사용법 (0) | 2014.02.07 |
[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("==> 대소문자 구분");
System.out.println(Arrays.toString(s)); //[A, C, D, F, a, b]
// 역순정렬
descArraySort(s);
System.out.println("==> 역순정렬 ");
System.out.println(Arrays.toString(s)); //[b, a, F, D, C, A]
// 대소문자 구분 없이 정렬
System.out.println("==> 대소문자 구분 없이 ");
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 < arr.length / 2; i++) {
temp = arr[i];
arr[i] = arr[(arr.length - 1) - i];
arr[(arr.length - 1) - i] = temp;
}
}
}
반응형
'Programming > Java' 카테고리의 다른 글
[Java Stream] anyMatch() vs filter().count > 0 성능 비교 (0) | 2023.06.12 |
---|---|
[Java] Heap Memory 체크 (JSTAT) (0) | 2021.03.29 |
[Java] GMT/UTC 날짜 변환 (1) | 2015.04.08 |
[오류]Setting property 'source' to 'org.eclipse.jst.jee.server:프로젝트명' did not find a matching property (0) | 2014.04.08 |
올바른 eqals() 사용법 (0) | 2014.02.07 |
[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;
}
반응형
'Programming > Java' 카테고리의 다른 글
[Java] Heap Memory 체크 (JSTAT) (0) | 2021.03.29 |
---|---|
[Java] Collection sort (0) | 2016.01.07 |
[오류]Setting property 'source' to 'org.eclipse.jst.jee.server:프로젝트명' did not find a matching property (0) | 2014.04.08 |
올바른 eqals() 사용법 (0) | 2014.02.07 |
[Java] split 문자열 나누기 (0) | 2014.02.05 |
장바구니 주문금액 재계산 스크립트
2015. 4. 6. 16:14
반응형
//선택한 주문상품 배열 생성 2015.03.19 -add lee.jong.pil var fnChkGoodsParam = function(){ //주문상품 재계산 배열 var goodsArray = new Array(); $("input[name^='cart_chk']").each(function(){ var $parent = $(this).parent(); var goodsParam = {}; if($(this).is(":checked")){ goodsParam.GOODS_NO = $parent.find("#goods_no").val(); goodsParam.GOODS_CUST_SALE_PRICE = $parent.find("#goods_Cust_Sale_Price").val(); goodsParam.GOODS_SALE_PRICE = $parent.find("#goods_Sale_Price").val(); goodsParam.GOODS_DC_PRICE_TOT = $parent.find("#goods_Dc_Price_Tot").val(); goodsParam.GOODS_DC_PRICE = $parent.find("#goods_dc_price").val(); goodsParam.GOODS_DC_PRICE1 = $parent.find("#goods_dc_price1").val(); goodsParam.GOODS_DC_PRICE2 = $parent.find("#goods_dc_price2").val(); goodsParam.GOODS_DC_PRICE_STAFF = $parent.find("#goods_dc_priceStaff").val(); goodsParam.GOODS_DLVF_ST = $parent.find("#goods_Dlvf_St").val(); goodsParam.GOODS_DLVF_COST = $parent.find("#goods_Dlvf_Cost").val(); goodsParam.GOODS_DLVF_POLICY_NO = $parent.find("#goods_Dlvf_Policy_No").val(); goodsParam.GOODS_VIR_VEND_NO = $parent.find("#vir_vend_no").val(); goodsArray.push(goodsParam); } //배송비 노출영역 초기화(벤더별) $("div.calcul-content").find('#'+$parent.find("#vir_vend_no").val()).find('.price').text("0"); }); //(2)선택된 상품 기준 주문금액 재계산 fnGoodsReCalcAmt(goodsArray); } //선택 상품 주문금액 재계산 var fnGoodsReCalcAmt = function(goodsArray){ //배송비 정책번호 기준으로 배열 정렬 goodsArray.sort(function(a, b){ return a.GOODS_DLVF_POLICY_NO-b.GOODS_DLVF_POLICY_NO; }); //console.dir("goodsArrays ===> " + JSON.stringify(goodsArray)); var goodsCustSalePriceAmt = 0; //고객판매가 총금액 var goodsSalePriceAmt = 0; //상품 판매가 총금액 var goodsDcPriceAmt = 0; //프로모션 총할인 금액 var goodsDcPrice = 0; //회원할인 var goodsDcPrice1 = 0; //월령할인 var goodsDcPrice2 = 0; //프리미엄할인 var goodsDcPriceStaff = 0; //임직원할인 var goodsReCalcDlvfCostAmt = 0; //재계산 배송비 합계 var tmpDlvfPolicyNo = 0; //직전 배송비정책 var tmpGoodsCustSalePrice = 0; //직전 고객판매가 //배송비 재계산 $.each(goodsArray, function(i) { var goodsDlvfPolicyNo = goodsArray[i].GOODS_DLVF_POLICY_NO; var goodsCustSalePrice = goodsArray[i].GOODS_CUST_SALE_PRICE; //1.배송비 정책 동일한 경우 if(tmpDlvfPolicyNo == goodsDlvfPolicyNo){ //재계산된 배송비 초기화 if(goodsArray[i-1]["GOODS_RECALC_DLVF_COST"] > 0){ $.each(goodsArray, function(j) { if(goodsArray[j].GOODS_DLVF_POLICY_NO == goodsDlvfPolicyNo){ goodsArray[j]["GOODS_RECALC_DLVF_COST"] = "0"; } }); } //직전 정책번호의 고객판매가 금액 조회 if(tmpGoodsCustSalePrice == 0){ tmpGoodsCustSalePrice = goodsArray[i-1].GOODS_CUST_SALE_PRICE; } var sumGoodsCustSalePrice = cmmCalc(tmpGoodsCustSalePrice, "+", goodsCustSalePrice); //1.동일정책 고객판매가 합산 : 기준정책금액 비교 if(parseInt(sumGoodsCustSalePrice) >= parseInt(goodsArray[i].GOODS_DLVF_ST)){ //1-1.동일정책 고객판매가 합산금액 >= 기준정책금액 goodsArray[i]["GOODS_RECALC_DLVF_COST"] = "0"; }else{ //1-2.동일정책 고객판매가 합산금액 < 기준정책금액 goodsArray[i]["GOODS_RECALC_DLVF_COST"] = goodsArray[i].GOODS_DLVF_COST; }; tmpGoodsCustSalePrice = sumGoodsCustSalePrice; //동일정책 고객판매가 합산 }else{ //배송비정책 동일하지 않은 경우 (최초에도 실행) //2.고객판매가 : 기준정책금액 비교 if(parseInt(goodsArray[i].GOODS_CUST_SALE_PRICE) < parseInt(goodsArray[i].GOODS_DLVF_ST)){ //2-1.고객판매가 < 기준정책금액 (기준배송비 부과) goodsArray[i]["GOODS_RECALC_DLVF_COST"] = goodsArray[i].GOODS_DLVF_COST; }else{ //2-2.고객판매가 > 기준정책금액 (배송비 0) goodsArray[i]["GOODS_RECALC_DLVF_COST"] = "0"; }; tmpGoodsCustSalePrice = 0; //동일정책 고객판매가 초기화 } tmpDlvfPolicyNo = goodsDlvfPolicyNo; //배송비정책 }); //console.dir("goodsArrays ===> " + JSON.stringify(goodsArray)); //주문금액합산 $.each(goodsArray, function(k){ goodsCustSalePriceAmt = cmmCalc(goodsCustSalePriceAmt, "+", goodsArray[k].GOODS_CUST_SALE_PRICE); goodsSalePriceAmt = cmmCalc(goodsSalePriceAmt, "+", goodsArray[k].GOODS_SALE_PRICE); goodsDcPriceAmt = cmmCalc(goodsDcPriceAmt, "+", goodsArray[k].GOODS_DC_PRICE_TOT); goodsDcPrice = cmmCalc(goodsDcPrice, "+", goodsArray[k].GOODS_DC_PRICE); goodsDcPrice1 = cmmCalc(goodsDcPrice1, "+", goodsArray[k].GOODS_DC_PRICE1); goodsDcPrice2 = cmmCalc(goodsDcPrice2, "+", goodsArray[k].GOODS_DC_PRICE2); goodsDcPriceStaff = cmmCalc(goodsDcPriceStaff, "+", goodsArray[k].GOODS_DC_PRICE_STAFE); goodsReCalcDlvfCostAmt = cmmCalc(goodsReCalcDlvfCostAmt,"+", goodsArray[k].GOODS_RECALC_DLVF_COST); var goodsVirVendNo = goodsArray[k].GOODS_VIR_VEND_NO; var goodsDlvfRCostName = goodsArray[k].GOODS_RECALC_DLVF_COST == 0 ? "무료배송" : toCurrency(goodsArray[k].GOODS_RECALC_DLVF_COST)+"원"; //이전 벤더사별 배송비 var prevGoodsVirVendPrice = cmmCalc($("div.calcul-content").find('#'+goodsVirVendNo).find('.price').text(), "+", goodsArray[k].GOODS_RECALC_DLVF_COST); $("div.calcul-content").find('#'+goodsVirVendNo).find('.price').text(toCurrency(prevGoodsVirVendPrice)); $("div.shipping-area."+goodsArray[k].GOODS_NO).text(goodsDlvfRCostName); }); //재계산 주문금액 노출 $("em.goodsCustSalePriceAmt").text(toCurrency(cmmCalc(goodsCustSalePriceAmt, "+", goodsReCalcDlvfCostAmt))); $("em.goodsSalePriceAmt").text(toCurrency(goodsSalePriceAmt)); $("em.goodsDcPriceAmt").text(toCurrency(goodsDcPriceAmt)); $("em.goodsDcPrice").text(toCurrency(goodsDcPrice)); $("em.goodsDcPrice1").text(toCurrency(goodsDcPrice1)); $("em.goodsDcPrice2").text(toCurrency(goodsDcPrice2)); $("em.goodsDcPriceStaff").text(toCurrency(goodsDcPriceStaff)); $("em.goodsReCalcDlvfCostAmt").text(toCurrency(goodsReCalcDlvfCostAmt)); } $("[name^=cart_chk]").bind("click", function(){ //(1)선택 상품 기준 배열생성 호출 fnChkGoodsParam(); });총 상품 판매가 원 총 할인 금액 원 총 배송비 원 프리미엄할인 원 회원할인 원 . .(생략)
반응형
'Programming > Frontend' 카테고리의 다른 글
[jQuery] multi element each (0) | 2015.03.31 |
---|---|
웹 사이트 성능 최적화 분석 자동화: YSlow와 CI 서버 연동 (0) | 2015.01.22 |
[jQuery] each break/continue (0) | 2015.01.22 |
[jQuery] loadingbar plugin (0) | 2014.09.19 |
jquery ajax method 정리 (0) | 2014.03.12 |
[jQuery] multi element each
2015. 3. 31. 15:23
반응형
다중 each index, value 출력
var fnLoadSetGoodLayer = function(paramJson){
$.each($("#"+paramJson.goods_no).find("[id='set_goods_nm']"), function(i, goods_nm){
$.each($("#"+paramJson.goods_no).find("[id='set_cmps_qty']"), function(j, cmps_qty){
if(i == j){
console.log($(goods_nm).val() + " " + $(cmps_qty).val());
};
});
});
}
반응형
'Programming > Frontend' 카테고리의 다른 글
장바구니 주문금액 재계산 스크립트 (0) | 2015.04.06 |
---|---|
웹 사이트 성능 최적화 분석 자동화: YSlow와 CI 서버 연동 (0) | 2015.01.22 |
[jQuery] each break/continue (0) | 2015.01.22 |
[jQuery] loadingbar plugin (0) | 2014.09.19 |
jquery ajax method 정리 (0) | 2014.03.12 |