분류 전체보기 (73) 썸네일형 리스트형 가비지 컬렉터와 가비지 컬렉션 알고리즘과 종류 (GC) "JVM 밑바닥까지 파헤지기" 책을 읽고 개인적으로 공부한 내용을 작성한 글 입니다.들어가며이번 글에서는 책의 3장에 해당하는 가비지 컬렉터와 메모리 할당 전략에 대해 다룹니다. GC의 동작 방식과 종류를 중점적으로 설명하며, Java뿐만 아니라 Python에서의 GC 동작 방식도 살펴봅니다. 1. 가비지 컬렉터와 가비지 컬렉션1.1 가비지 컬렉터 (Garbage Collector)가비지 컬렉터는 메모리 관리 시스템을 담당하는 프로그램 또는 시스템 구성 요소입니다. 이는 프로그래밍 언어나 런타임 환경에서 더 이상 사용되지 않는 객체나 데이터를 자동으로 찾아내어 해제하고, 해당 메모리를 재사용할 수 있도록 합니다. Java나 Python과 같은 언어에서 가비지 컬렉터는 런타임 환경의 일부로 존재하며, 개발.. JVM 락 최적화 스핀 락과 적응형 스핀스핀락스레드가 락을 얻기 위해 계속해서 락 상태를 확인해가며 반복적으로 시도하는 방법멀티 코어 시스템에서는 대기 없이 사용 가능스레드 전환 부하는 줄였지만, 프로세서 시간을 소비적응형 스핀락을 기다리는 스레드가 락의 상태와 시스템 상황을 기반으로 스핀을 계속 할지, 블락을 할지 결정하나의 락 객체의 성공 여부에 따라 다음번의 성공 가능성 판단락 제거JVM이 불필요한 락을 제거하여 성능 최적화앞선 챕터에서 언급했듯이 코드가 락을 사용하는 것이 불필요하다고 판단 시 사용 → 오버헤드를 줄일 수 있다.동작 방식JVM이 코드가 특정 스레드 내에서 동작하는 지, 다른 스레드가 접근 가능한지 판단락 범위 확장JVM이 동일한 락 객체를 잠그는 과정이 반복되는 것을 탐지한다면 락의 유효범위를 해당.. Java 스레드 안전한 상태 정의와 구현 방식 스레드 안전성스레드 안전한 상태특별한 스레드 스케줄링이나 대체 실행 수단을 고려할 필요가 없다.추가적인 동기화 수단이나 호출자 측에서 조율이 필요 없다.→ 두 조건이 충족하면 스레드 안전하다고 본다. 자바언어의 공유 데이터의 안전한 정도!불변자바 언어에서 불변 객체는 객체 자체의 메서드 구현과 호출자 모두에서 아무런 안전장치 없이도 스레드 안전하다. → final 키워드의 가시성 때문에 어느 시점에 접근해도 동일한 값을 반환한다.자바 불변 객체의 예시final 키워드 final 키워드로 변수를 선언하면 생성자 종료 후에는 값을 변경할 수 없다.Wrapper 클래스BigInteger, BigDecimalJava.time의 주요 API열거타입 열거 타입은 프로그램 시작 시 한번만 생성되며 이후 재할당이나 수.. 자바의 동기화 매커니즘 "JVM 밑바닥까지 파헤지기" 책을 읽고 개인적으로 공부한 내용을 작성한 글 입니다.들어가며이 책은 번역본이라 단순히 읽는 것만으로는 문맥상 이해하기 어려운 부분이 꽤 있었습니다. 그래서 제가 읽고 이해한 내용을 기반으로 구조를 재배치해 정리한 내용을 공유하려 합니다. 5부 12장은 JVM이 멀티 스레드 환경에서 동기화를 처리하는 방식을 다루고 있습니다. 이를 통해 평소 의미만 알고 사용했던 함수들의 동작 원리와, 유사한 역할을 하는 함수들 간의 차이를 이해할 수 있었습니다. 자바의 다중 스레드 환경자바의 다중 스레드 환경을 이해하기 전에, 하드웨어 멀티태스킹 환경을 먼저 떠올려 봅시다. 책에서 다중 스레드 환경과 함께 하드웨어 멀티태스킹 환경을 설명한 이유는 물리적인 해결 방식을 가상 머신에 적용할 때.. [Python, Java] 프로그래머스 - 디펜스게임 문제준호는 요즘 디펜스 게임에 푹 빠져 있습니다. 디펜스 게임은 준호가 보유한 병사 n명으로 연속되는 적의 공격을 순서대로 막는 게임입니다. 디펜스 게임은 다음과 같은 규칙으로 진행됩니다.준호는 처음에 병사 n명을 가지고 있습니다. 매 라운드마다 enemy[i]마리의 적이 등장합니다. 남은 병사 중 enemy[i]명 만큼 소모하여 enemy[i]마리의 적을 막을 수 있습니다. 예를 들어 남은 병사가 7명이고, 적의 수가 2마리인 경우, 현재 라운드를 막으면 7 - 2 = 5명의 병사가 남습니다. 남은 병사의 수보다 현재 라운드의 적의 수가 더 많으면 게임이 종료됩니다. 게임에는 무적권이라는 스킬이 있으며, 무적권을 사용하면 병사의 소모없이 한 라운드의 공격을 막을 수 있습니다. 무적권은 최대 k번 사용할.. [Python] 프로그래머스 - 다리를 지나는 트럭 문제트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 수 있으며, 다리는 weight 이하까지의 무게를 견딜 수 있습니다. 단, 다리에 완전히 오르지 않은 트럭의 무게는 무시합니다.예를 들어, 트럭 2대가 올라갈 수 있고 무게를 10kg까지 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다.따라서, 모든 트럭이 다리를 지나려면 최소 8초가 걸립니다.solution 함수의 매개변수로 다리에 올라갈 수 있는 트럭 수 bridge_length, 다리가 견딜 수 있는 무게 we.. [Python, Java] 프로그래머스 - 짝지어 제거하기 문제짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다.예를 들어, 문자열 S = baabaa 라면b aa baa → bb aa → aa →의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다.제한사항문자열의 길이 : 1,000,000이하의 자연수 문자열은 모두 소문자로 이루어져 있습니다.두번 반복되는 문자.. [Python] 프로그래머스 - 전력망 둘로 나누기 문제n개의 송전탑이 전선을 통해 하나의 트리 형태로 연결되어 있습니다. 당신은 이 전선들 중 하나를 끊어서 현재의 전력망 네트워크를 2개로 분할하려고 합니다. 이때, 두 전력망이 갖게 되는 송전탑의 개수를 최대한 비슷하게 맞추고자 합니다.송전탑의 개수 n, 그리고 전선 정보 wires가 매개변수로 주어집니다. 전선들 중 하나를 끊어서 송전탑 개수가 가능한 비슷하도록 두 전력망으로 나누었을 때, 두 전력망이 가지고 있는 송전탑 개수의 차이(절대값)를 return 하도록 solution 함수를 완성해주세요.제한사항n은 2 이상 100 이하인 자연수입니다.wires는 길이가 n-1인 정수형 2차원 배열입니다.wires의 각 원소는 [v1, v2] 2개의 자연수로 이루어져 있으며, 이는 전력망의 v1번 송전탑과.. 이전 1 2 3 4 ··· 10 다음