Language/Java

Language/Java

[Java] Garbage Collection

Gabage Collection JVM의 Heap 영역에서 사용하지 않는 객체를 삭제하는 프로세스 사용되는 객체인지를 판변하는 기준은 reachable이다. GC Root 스택 변수, 전역 변수 등 heap 영역 참조를 담은 변수를 의미 GC Root 부터 시작하여 객체를 탐색하여 reachable을 판단한다. GC Root의 종류 Class Loader에 의해 로딩된 클래스 지역 변수와, 매개 변수 현재 활성화된 스레드 정적 변수 JNI Reference JNI 메서드의 지역 변수 / 매개 변수 전역 JNI 참조 변수 모니터로 사용된 객체 GC의 동작 방식 GC가 발생했다면 다음의 공통적인 단계를 따르게 된다. Stop The World Mark and Sweep Stop the World GC를 실행..

Language/Java

멀티 쓰레드를 사용할 때 주의점과 synchroized를 활용한 쓰레드 동기화

이 글은 남궁성 자바의 정석 -기초편 강의를 참고하며 작성하였습니다. 멀티 쓰레드란? 멀티 쓰레드는 하나의 프로그램이 여러 개의 스레드를 사용하여 동시에 작업을 수행하는 것을 말합니다. 각각의 스레드는 독립적으로 실행되지만, 하나의 프로세스 내에서 동작합니다. 멀티 스레드를 사용하면, 동시에 여러 개의 작업을 처리할 수 있으므로 CPU 자원을 효율적으로 사용할 수 있습니다. 멀티 쓰레드의 문제 하지만 멀티 스레드를 사용하면, 스레드 간의 동기화 문제, 데드락 등의 문제가 발생할 수 있습니다. 이러한 문제를 해결하기 위해서는 적절한 동기화 기술과 스레드 안전(Thread-safe)한 자료구조를 사용해야 합니다. 코드 실습 코드 실습의 목적 아래의 코드 실습의 목적은 두 가지가 있습니다. 멀티 쓰레드를 활용..

Language/Java

스트림(Stream) 이란?

스트림이란? 다양한 데이터 소스를 표준화 된 방법으로 다루기 위한 것. 어떠한 데이터를 스트림으로 변환하면 같은 방식으로 데이터를 변환하고 반환한다. List list = Arrays.asList(1,2,3,4,5); Stream intStream = list.stream(); // 컬렉션 Stream strStream = Stream.of(new String[]("a","b","c"}); // 배열 Stream envenStream = Stream.iterate(0, n -> n+2 ); // 람다식 Stream randomStream = Stream.generate(Math::random); // 람다식 IntStream intStream = new Random().ints(5); // 난수 스트림 ..

Language/Java

문자열을 정수로 바꾸기

개요 알고리즘 문제를 풀거나 프로그램을 만들 때, 종종 문자열(String)을 다른 자료형으로 바꿔야할 상황이 있다. 이 글은 문자열을 정수로 바꾸는 방법에 대해 기록한다. 1.Integer.parseInt() 문자열을 입력으로 받고, 원시형 정수(primitive type int) 를 리턴하는 Integer 클래스의 메서드이다. 만약, 입력값이 유효한 숫자를 포함하지 않는다면 NumberformatExeption이 쓰로우 된다. 2.Integer.valueOf() 문자열을 입역으로 받고, 정수 객체(Integer object) 를 리턴하는 Integer 클래스의 메서드이다. new Integer(Integer.parseInt())와 같은 결과를 내놓는다. 마찬가지로 입력값이 유효한 숫자를 포함하지 않는..

Language/Java

기반 스트림과 보조 스트림

개요 우리가 프로그램을 만들면서, 데이터를 파일로 저장하거나, 파일에서 데이터를 읽고 싶을 때가 있다. 이때 우리는 스트림(Stream)이라는 통로를 이용해 데이터를 읽고,쓸 수 있다. 스트림이란? 네트워크에서 데이터의 흐름이 물과 같다는 의미에서 유래된 단어로, 다양한 입출력 장치에 독립적으로 일관성 있는 입출력을 제공하는 방식을 말한다. 입출력 장치 : 모니터, 키보드, 파일 디스크, 메모리 네트워크 스트림의 구분 대상 기준으로 구분 스트림은 데이터의 흐름이므로, 한 방향으로 밖에 흐르지 못한다. 즉 입력과 출력 둘 다 다르는 스트림은 없다는 뜻이다. 입력 스트림 : 대상으로 부터 자료를 읽어 들이는 스트림 - FileInputStream, FileReader, BufferedInputStream, ..