본문 바로가기

Programing/JVM(Java, Kotlin)

(96)
[Java] Scope shadowing과 DCL51-J 가끔 sonarqube 돌려보면 DCL51-J 에 대한 코드 냄새가 잡힌다. 예를 들면 아래와 같다. 5번째 라인에서 지역변수 value를 사용하면 멤버변수인 value와 이름이 동일한데 사용했다고 경고를 한다. public class Foo { private String valueType; public void foo(SomeParameter someParameter) { ValueType valueType = someParameter.getValueType(); if (valueType != null) { this.valueType = valueType.name(); } } } 이럴 경우 어떠한 방법이 좋을까? 방법1. 지역 이름을 바꾼다. - 쉬우면서 명시적인 방법이다. public class Fo..
[Java] 내가 사용하는 GC 알고리즘은 무엇일까? 자바에서는 보통 아래 다섯가지를 주요 GC 타입을 기술한다. Serial Garbage Collector- S GC Parallel Garbage Collector- P GC CMS Garbage Collector- CMS GC G1 Garbage Collector- G1 GC The Z Garbage Collector- ZGC 웹에서 기본 CG를 찾아보면 자바 버전에 따라 달라졌음을 알 수 있다. stackoverflow: Default garbage collector for Java 8 Java 7 - P GC Java 8 - P GC Java 9 - G1 GC Java 10- G1 G 시간대에 따라 힙의 증감 톱니바뀌는 다름을 알 수 있다. 트래픽이 적은 새벽 3시~8시에는 주기가 길고, 많은 주간..
[Java] JMM 에 대한 글들 자바에서 동시성에 대해 알기위한 기초. 자바 메모리 모델의 줄임말 JMM에 대한 JSR-133 스펙을 대신할 수 있는 좋은 글들이 있어서 블로그에 링크를 달아둔다. Java 5의 동시성 라이브러리를 많이 만든 더그 리(Doug Lea)의 The JSR-133 Cookbook for Compiler Writers 그림이 곁들어져 있는 Aleksey Shipilёv의 Close Encounters of The Java Memory Model Kind
[Java 11] 자바11 에서 테스트가 깨진다!? Spock Framework 로 테스트 코드를 짜고 있다. 이상하게 자바8에서는 잘 동작하던 것이 11에서 깨지는 것이 발견되었다. 두 개의 테스트가 실패했는데 공통점은 인터페이스를 익명클래스로 상속해서 오버라이딩하는 부류의 코드였다. 결국 Spock Framework에서 제공하는 Stub()으로 그 인터페이스를 대체했더니 사라지긴 했다. 에러 스택은 아래와 같았다. 클래스로더가 테스트 메소드에서 오버라이딩한 클래스를 로딩을 못하는 느낌이 든다. (모듈 때문일까?) java.lang.ClassFormatError: Illegal method name "어떤 테스트..." in class com/tistory/namocom/service/FooSpec$1 at java.base/java.lang.Class..
[Java] Object.hashCode JavaDoc - History Java 1.3.1 hashCode public int hashCode()Returns a hash code value for the object. This method is supported for the benefit of hashtables such as those provided by java.util.Hashtable. The general contract of hashCode is: Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no i..
[Java] "서로 다른 두 객체는 결코 같은 해시코드를 가질 수 없다."? 자바의 정석 453쪽에 보면 "서로 다른 두 객체는 결코 같은 해시코드를 가질 수 없다."라는 말이 나와있다. 물론 Object의 hashCode는 오버라이드가 가능하므로 다음과 같이 코드를 짠다면 무조건 같은 해시코드만 반환이 될 것이다.public class Foo { @Override public int hashCode() { return 1; } public static void main(String[] args) { Foo foo1 = new Foo(); Foo foo2 = new Foo(); System.out.println(foo1 == foo2); System.out.println(foo1.hashCode() == foo2.hashCode()); } }위의 코드를 실행한다면false tru..
[java] Java 8의 시간은 10000년을 파싱 못한다? 10000년까지 살아 있을지는 모르겠지만 테스트 케이스를 만들었는데 LocalDate.parse("10000-01-01") 위와 같은 코드는 아래와 같은 파싱 예외가 발생한다. java.time.format.DateTimeParseException: Text '10000-01-01' could not be parsed at index 0 at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949) at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851) at java.time.LocalDate.parse(LocalDate.java:400) at j..
[Java] toString에서 나타나는 [, L 등의 문자의 정체는? 간단한 코드이다. 아래의 코드를 수행하면 어떤 글자들이 콘솔에 찍힐까? package com.tistory.namocom.question public class ToStringTest { public static void main(String[] args) { Object object = new Object(); Object[] objects = new Object[1]; System.out.println(object); System.out.println(objects); } } 아래의 결과를 보기 전에 미리 생각해보자. 더보기 java.lang.Object@6576fe71 [Ljava.lang.Object;@76fb509a 생각했던 것과 일치했을까? System.out.println 왜 이런 글자들이 ..