분류 전체보기
-
같은 value 값을 가지는 String들의 hashcode가 같은 이유Java/Basics 2020. 6. 19. 13:31
같은 value 값을 가지는 String들의 hashcode가 같은 이유가 궁금해졌다. hashcode 대해 공부하던 도중 "test"와 new String("test")의 hashcode 값이 당연히 다를 줄 알았다. 왜냐하면 hashcode는 객체의 16진수 주소값을 10진수화 한 것이기 때문이다. "test"와 new String("test")는 저장되는 영역이 다르기 때문에 주소값도 다를 것이고 이에 따라 hashcode의 값도 달라야 한다는게 내 생각이었다. 하지만 결론부터 말하자면, 주소값은 다르지만 hashcode는 같았다. 왜 그럴까? ■hashcode 간단 설명 (String에서의 hashcode를 설명하기 위한 빌드업) 어떤 인스턴스는 주민등록번호와 같은 고유한 값을 가지고 있다. 그것..
-
메모리 주소만으로 Heap의 인스턴스에 접근할 수 있을까?Java/Basics 2020. 6. 17. 00:32
자바 스터디를 하던 중, 메모리 주소만으로 Heap의 인스턴스에 접근할 수 있을까? 라는 질문이 나와서 이에 대해 알아봤다. 결론은 접근할 수 없다 왜 그런지 살펴보자 ■개발자는 객체의 주소를 직접적으로 지정할 수 없다 개발자는 객체의 주소를 직접적으로 지정할 수 없다. 오직 간접적으로만 할 수 있다. 예를들어, String str = "hello"; 코드를 보면 "hello" 문자열의 메모리 주소가 str에 할당되고 있다. 이제 str은 메모리 주소를 갖게 된다. 그리고 String str2 = str; 코드를 보면 str이 가리키고 있는 주소가 str2에 할당되고 있다. "hello"라는 인스턴스를 복사하는 것이 아닌 "hello"의 주소를 복사하여 할당하는 것이다. 그러나 메모리 주소를 참조 변수에..
-
Java Heap DumpJava/Basics 2020. 6. 15. 22:18
■Memory Leak 프로그램이 OOM(Out Of Memory) 오류로 종료되거나 실행 속도가 저하되는 현상. 자주 발생하는 OOM 2가지 1. java.lang.OutOfMemorryError: heap space 2. java.lang.OutOfMemorryError: GC Overhead limit exceed 출처에 따르면, 자바 프로세스가 약 98%의 시간을 가비지 컬렉터를 실행하는데 소모하고 실행 이후에도 2% 이상의 힙 공간을 다섯 번 이상 확보하지 못할 때 이 예외가 발생한다. ■OOM에 대처하는 방법 프로그램이 OOM으로 인해 종료될 때 자동으로 당시의 메모리 정보를 파일(Heap Dump)로 남겨야 한다. -XX:+HeapDumpOnOutOfMemoryError 위 명령어를 프로그램..
-
JVM, JRE, JDKJava/Basics 2020. 6. 14. 23:29
■JVM이란? - Java Virtual Machine의 줄임말 - Java Byte Code(.class)를 각 OS에 맞게 해석하고, 해석된 코드의 실행 환경 구성 및 실행을 담당하는 가상 머신 (OS별 JVM 설치 필요) (아래에서 좀 더 자세히 살펴보자) ■JRE란? - Java Runtime Environment의 줄임말 - JVM과 자바 실행에 필요한 기본적인 클래스 라이브러리(Java Class Library)를 가지고 있다. - JRE를 다운로드받아 Java Byte Code(.class)를 실행시킬 수 있다. - Java파일을 컴파일할 수 없다.(Javac가 포함되어 있지 않음) - Oracle은 Java 11부터 JRE를 제공하지 않는다. Java 9 부터는 Jlink를 사용하여 커스텀..
-
[이펙티브 자바] item 4 - 인스턴스화를 막으려거든 private 생성자를 사용하라개발서적읽기/Effective Java 3E 2020. 6. 10. 01:50
■Static 메서드와 변수만을 담는 클래스는 정말 필요할 때만 사용하자 정적 메서드와 정적 필드만을 담는 클래스는 객체지향에 맞지 않기 때문에 지양하는 것이 좋다. 그러나 꼭 필요한 곳에서는 요긴하게 쓰일 수 있어, 잘 판단해서 사용하면 좋다. 아래와 같은 유틸리티성 클래스를 예로 들 수 있겠다. - java.lang.Math - java.lang.Arrays - java.lang.Collectionsfinal 클래스와 관련한 메서드들을 모아놓을 때도 사용한다. 특정 라이브러리를 사용중이고, 그 라이브러리 내의 클래스에 어떤 메소드를 추가하고 싶을 수가 있다. 이러한 경우엔 그 클래스를 상속한 후 원하는 메소드를 추가하면 된다. 그런데 하필 그 클래스가 final 클래스라면? 상속은 불가능하다. 그럴땐..
-
Java Heap (with GC)Java/Basics 2020. 6. 8. 21:14
■Heap이란 - 인스턴스와 배열이 동적으로 생성되는 공간. - 생성에 필요한 인스턴스와 배열의 메타 정보는 Heap 내의 Method Area에서 얻어온다. - 모든 Thread가 공유하기 때문에 동기화 문제가 발생할 수 있다. - Garbage Collection의 대상이 되는 영역. - 개발자는 객체를 제거하기 위해 별도의 코드를 작성할 필요가 없고 오히려 부작용만 낳을 가능성이 큼. GC에 맡기는 것이 좋다 ■Heap 구성Heap의 각 영역이 의미하는 것은 아래 GC의 프로세스를 이해하면 더 구체적으로 알 수 있다. Java 8 이전 Java 8 이전에는 Metaspace라고 지칭된 영역 대신에 PermGen(Permanat Generation Space) 라고 불리는 영역이 존재했었다. 이 영역..
-
지적 대화를 위한 넓고 얕은 지식(정치파트)리뷰/카페 리뷰 2020. 6. 7. 08:49
■보수와 진보 그리고 민주주의, 189p "세상의 모든 사람은 자신이 그 사실을 이해하건 못하건 간에 이미 보수이거나, 진보다" 진보, 보수는 우리가 생활하고 있는 방식에 이름을 붙인 것에 지나지 않는다. 어렵게 볼 것 없이 현재의 삶을 유지하고 싶으면 보수, 바꾸고 싶으면 진보다. ■보수와 진보의 이론적 구분, 196p "세계관의 차이는 사회에서 발생하는 문제들에 대한 평가를 다르게 함을 확인했다" 각 세계관은 같은 현상을 다르게 이해한다. 가난하여 동반 자살을 한 가족들을 두고 보수와 진보는 전혀 다른 결론을 도출한다. 두 관점 모두 잘못된 것은 없다고 본다. 선과 악의 대결이 아닌 성향에 따른 선택의 문제라고 생각한다. 다만, 자신의 이익을 위해 악마의 탈을 쓰는 경우가 종종 있긴 하지만 일반적으로..
-
미·중 신냉전, 중간에 낀 한국?경제/경제이슈 분석 2020. 6. 5. 15:12
■ 미·중 무역전쟁, 신냉전? 요즘 미국과 중국의 무역과 정책 등을 비롯한 여러 분야에서의 갈등을 뉴스에서 자주 접할 수 있다. 사실 이러한 일들은 최근 시작된 것이 아니다. 2018년 미국 트럼프 대통령은 중국의 수출품에 25%의 고관세를 부과했고, 중국도 마찬가지로 관세를 부과하며 갈등이 시작됐다. 트럼프 대선 초기때부터 자국민우선주의를 보여주며 보호무역을 펼쳤고, 당시 미국은 중국과의 무역에서 오랫동안 적자를 기록했다. 트럼프는 중국의 지식재산권 침해, 기술 이전 등의 관행을 바로잡기 위한 조사를 하겠다는 행정명령에 사인했고, 중국은 이를 비난하며 거부했다. 그리고 미국은 이를 계기로 무역전쟁을 시작했다. 단순한 관세만 높인 것이 아니라 화웨이의 미국기업과의 거래를 중단시켰고, 주변국에게도 압박을 ..