가비지 컬렉션과 Minor/Major GC 동작 과정
·
Backend/Java
가비지 컬렉션은 더 이상 사용되지 않는 메모리를 자동으로 찾아내어 해제하는 메모리 관리 메커니즘이다. Java 개발에서 가장 중요한 특징 중 하나로, 개발자가 메모리 관리에 대한 부담을 덜 수 있게 해준다. 가비지(Garbage)란?프로그램을 개발하고 실행하는 과정에서는 더 이상 사용되지 않는 메모리인 '가비지(Garbage)'가 발생한다. 이는 다음과 같은 경우에 발생할 수 있다.// 1. 객체의 참조가 null이 되는 경우String text = "Hello";text = null; // 이전의 "Hello" 객체는 가비지가 됨// 2. 객체의 참조 범위를 벗어나는 경우public void createObject() { String localVar = "Hello"; // 메서드 종료 시 접..
volatile 이란?
·
Backend/Java
Volatile'Java 변수를 main memory에 저장하겠다' 라는 것을 명시하는 것매번 변수의 값을 read할 때 마다 cpu cache에 저장된 값이 아닌 메인 메모리에서 읽는 것변수의 값을 write할 때 마다 main memory에 까지 작성하는 것volatile 변수를 사용하고 있지 않는 멀티스레드 어플리케이션에서는 task를 수행하는 동안 성능 향상을 위해 메인 메모리에서 읽은 변수 값을 cpu cache에 저장하게 된다.  ExamplesharedObject를 공유하는 두 개의 스레드가 있다.스레드 1은 카운터 값을 더하고 읽는 연산을 한다. (read & write)스레드 2는 카운터 값을 읽기만 한다. (only read)public class SharedObject { public..
[Java] Java Application이 32bit 또는 64bit JVM에서 실행 중인지 여부 판별하기
·
Backend/Java
Java에 대해서 천천히 공부 중이다. 알고리즘 문제를 풀기 위해서, 개발을 위해서, 학교 수업을 위해서 어떤 문법으로 어떤 기능을 개발할 것이냐에 초점을 두고 공부해왔다. JVM이 어떻게 돌아가는 지, Java API가 제공하는 기능들이 무엇인지도 모르면서...!  하나씩 차근차근 이해하고 공부하자.  public class Main { public static void main(String[] args) { // We can use the “sun.arch.data.model” system property to identify JVM bitness: String jvmBit = System.getProperty("sun.arch.data.model"); if..
Comparable과 CompareTo
·
Backend/Java
CompareTo() compareTo() 함수는 두개의 값을 비교하여 int 값으로 반환해주는 함수이다. compareTo() 함수에는 “문자열의 비교”와 “숫자의 비교” 두 방식이 존재한다. 숫자의 비교 : 크다(1), 같다(0), 작다(-1)의 결과값을 리턴 문자열 비교 : 같다(0), 그 외 양수/음수값 같이 참 재미난 결과 리턴 비교대상에 문자열이 포함되어 있을 경우 1. 기준값에 비교대상이 포함되어 있을 경우 서로의 문자열 길이의 차이값을 리턴해준다. 예를 보면, “ab”(2) - “a”(1) = 1 “ab”(2) - “ab”(2) = 0 “”(0) - “ab”(2) = -2 “ab”(2) - “”(0) = 2 public class Test { public static void main(St..
SOLID 5가지 원칙
·
Backend/Java
SRP 단일 책임 원칙(Single responsibility principle) 하나의 클래스는 하나의 책임만 가져야 한다. 하나의 책임은 모호하다. 클 수도 있고, 작을 수도 있으며, 문맥과 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것 UI 변경, 객체의 생성과 사용을 분리 OCP 개방-폐쇄 원칙(Open/closed principle) 소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀 있어야 한다. 다형성을 활용해보기 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현 지금까지 배운 역할과 구현의 분리를 생각해보기 문제점 MemberService 클라이언트가 구현 클래스를 직접 선택 MemberRepository..
자바 컬렉션 프레임워크 - Java Collections Framework
·
Backend/Java
자료구조의 분류대표적으로 선형 자료구조와 비선형 자료구조 나눌 수 있는데 이러한 분류를 보통 형태에 따른 자료구조라고 보며, 각 자료구조에 알맞게 구체화된 것들을 구현된 자료구조라고 한다. 선형 자료구조(Linear Data Structure): 리스트(List), 큐(Queue), 덱(Deque) 비선형 자료구조(NonLinear Data Structure): 그래프(Graph), 트리(Tree) 집합 자료구조: 집합(Set) Java Collection Framework일정 타입의 데이터이 모여 쉽게 가공할 수 있도록 지원하는 자료구조의 뼈대(기본 구조)라는 의미 자바에서 제공하는 Collection은 크게 3가지 인터페이스로 나뉜다. (List, Queue, Set)앞서 설명한 형태에 따른 자료구조..
JDK, JRE 그리고 JVM
·
Backend/Java
JDK Java Development kit JDK = JRE + 개발을 위한 도구 컴파일러, 디버그 도구 등이 포함 JRE Java Runtime Environment JRE = JVM + 자바 프로그램 실행에 필요한 라이브러리 파일 등 JVM의 실행환경 구현 JVM : 자바 프로그램을 구동해주는 프로세서(엔진) OS마다 다른 컴파일러가 필요하지만 JAVA는 JVM이 똑같은 바이트 코드를 OS마다 다르게 번역해준다. (⇒ 해당 OS가 이해할 수 있도록 번역해준다) 그렇기 때문에 플랫폼에 독립적인 개발이 가능하다. 동작 과정 자바 실행 파일을 실행하면 JVM은 OS로부터 메모리를 할당한다. .java(자바 소스코드)를 컴파일러가 .class(바이트 코드)로 컴파일해준다. 컴파일된 바이트 코드는 Java ..