본문 바로가기

Java

(23)
Java Garbage Collection Java Garbage Collection NAVER D2 1. 가비지 컬렉션 과정 - Generational Garbage Collection 1.1. 'stop-the-world' GC를 실행하기 위해 JV 이 어플리케이션 실행을 멈추는 것 GC를 수행하는 쓰레드를 제외한 모든 쓰레드는 작업을 멈춤 GC튜닝이란 stop-the-world 를 줄이는 것이다. 1.2. 명시적 해제 명시적으로 해제하려고 null을 할당하거나 System.gc()를 호출하는 경우도 있음 → System.gc()는 성능에 매우 큰 영향을 끼친다.(아마도 gc를 하면 stw 가 발생하여서 그런 것 같다.) 1.3. 두 가지 가설에 기반한 가비지 컬렉션 대부분의 객체는 금방 접근 불가능 상태가 된다. 왜??? 왜 이런 가설이? ..
Java HashMap은 어떻게 동작하는가? Java HashMap은 어떻게 동작하는가?(NAVER D2) NAVER D2 해시맵과 테이블은 기능은 동일하다 다만 보조해시 함수를 사용하는 해시맵이 충돌이 덜 발생할 수 있어 상대적으로 성능상 이슈가 있다. 해시 테이블은 거의 변화가 없지만 해시 맵은 버전을 거치면서 변화가 많다 어떤 변화? // 해시맵의 선언부 public class java/util/HashMap extends java/util/AbstractMap implements java/util/Map java/lang/Cloneable java/io/Serializable { // 해시 테이블의 선언부 public class java/util/Hashtable extends java/util/Dictionary implements jav..
[Kotlin] 함수 정의와 호출 함수 정의와 호출 3장에서 다루는 내용 컬렌션, 문자열, 정규식을 다루기 위한 함수 이름 붙인 인자, 디폴트 파라미터 값, 중위 호출 문법 사용 확장 함수와 확장 프로퍼티를 사용해 자바 라이브러리 적용 최상위 및 로컬 함수와 프로퍼티를 사용해 코드 구조화 3.1. 코틀린에서 컬렉션 만들기 숫자로 이루어진 집합 val set = hashSetOf(1, 7, 53) 리스트와 맵 val list = arrayListOf(1, 7, 53) val map = hashMapOf(1 to "one", 7 to "seven", 53 to "fifty-three") 여기서 to는 언어가 제공하는 특별한 키워드가 아니라 일반 '함수' 라는 점에 유의하자 위에서 만든 객체의 클래스 >>> println(set.javaCla..
Filter 를 활용한 ACL 만들기 (feat. Spring) 1. 개요 업무를 하던중 컨트롤러 레이어에서 허용된 IP 를 체크하는 로직이 상당수 중복코드로 남아 있는것을 발견함 IP 체크를 통해 허용된 IP가 아니라면 Exception 을 던지고 있었음 허용되지 않은 IP가 접근하는것을 Exception이 아닌 403(forbidden)응답 또는 은닉화를 위해 404(Not Found) 응답을 돌려줘야 된다고 생각함 2. Before 2.1. Code 2.1.1. Controller @RequestMapping(value = "/api/test") public Map apiTest() { // 중복코드 if (!ipInfoService.checkAllowIps()) { throw new RuntimeException( "[" + appProjectName + " ..
스택 계산기-(후위연산식을 통해 계산기를 만들어 보자!) 보호되어 있는 글입니다.
후위연산식을 이용한 스택 계산기-(중위에서 후위 변경 step.1) 보호되어 있는 글입니다.
다중 버전 jdk 설정 Bash Shell # ~/.bash_profile # 해당 부분 변경시 기본 버전 변경 java::init 1.8 function java::init() { local java_version java_version=$1 export JAVA_HOME=$(/usr/libexec/java_home -v $java_version) }
IT 기초 공부 (추가중) IT 기초 자바 기초 자바 메모리 영역 메서드 영역 : static 변수, 전역변수, class정보 스택 : 지역변수, 함수(메서드), LIFO 방식 힙 : 동적할당 객체 gc가 관리함 메모리 상수풀 영역 : 힙영역에 생성, 프록세스 종료까지 계속 유지, 작성한 상수값을 가지고 있음 인터페이스 사용 이유 인터페이스 작성된 책임은 항상 구현되어 있다는 강제성을 가짐 -> 이를 통해 다형성 및 기타 유연한 작업이 가능해짐 Mark 역할을 하여 특정 기능을 표시해줌(Serializable 등) JDBC란? 자바에서 데이터베이스 접속할 수 있도록 하는 자바 api 직렬화란? 스트림을 통해 입출력이 가능할 수 있도록 전달할 수 있는 구조로 변경하는 것 serialVersionUID 선언 이유 직렬화/역직렬화 때 ..
java8 병렬 스트림 효율적으로 사용하는 방법 1. 병렬 스트림이란 ?병렬 스트림이란 스트림에 각 요소를 청크(Chunk)로 분할한 스트림이다.따라서 병렬 스트림을 이용해 멀티코어 프로세스가 각각의 청크를 처리하도록 할당할 수 있다. 1.1 병렬 스트림 속도차이 확인하기 1.1.1 첫번째 시도 무한스트림 생성이 가능하다는 성질을 이용하여숫자 n 개를 받아 1부터 n 까지의 모든 숫자를 합계로 반환하는 메서드를 구현해보자 일반 스트림 연산 public static long sequentialSum(long n) { return Stream.iterate(1L, i -> i + 1).limit(n).reduce(0L, Long::sum); } 전통적인 자바 반복문을 통한 연산 public static long iterativeSum(long n) { l..
Java Stream & Reduce VS mapToInt Performance 비교 List numList = new ArrayList(); for(int i=0; i i).reduce(0, Integer::sum); long end1 = System.currentTimeMillis(); long start2= System.currentTimeMillis(); numList.stream().mapToInt(i -> i).sum(); long end2 = System.currentTimeMillis(); System.out.println("first : " + (end1 - start1)); System.out.println("second : " + (end2 - start2)); 결과first : 1489second : 40 이렇게 많은 시간이 차이나는 이유는 reduce 연산중 내부에..