Language/Java

발생한 문제Spring Validation을 사용하는 도중 @NotBlank 어노테이션의 message 필드 값을 지정하면 'Attribute value must be constant' 에러를 내면서 컴파일이 되지 않는 문제를 맞닥뜨렸다.분명 위 사진처럼 Enum을 사용하지 않고 String 리터럴 값을 넣으면 문제 없이 컴파일이 된다. 원인어노테이션은 JDK 1.8 기준 JVM 실행 시 클래스 로더에 의해 클래스 로딩 시점에 Metaspace 영역에 저장된다.이 때 어노테이션의 속성 값에 저장되는 message(위 사진)는 Metaspace 영역의 어노테이션 메타 데이터 구조 내에 포함된다.Metaspace 영역 안에 있는 데이터들은 한번 메모리에 올라가면 불변 성격을 갖는다.따라서 어노테이션에 사용되..
기본적으로 스레드 풀은 작업이 제출되면 corePoolSize의 새 스레드를 추가해서 작업을 할당하고 큐 작업을 바로 추가하지 않는다. corePoolSize를 초과해서 스레드가 실행 중이면 새 스레드를 추가해서 작업을 할당하는 대신 큐에 작업을 추가한다. 만약 큐가 가득차게 되면 스레드가 maxPoolSize 이상까지 늘어나게 되고 maxPoolSize 이상 실행 중이면 더 이상 작업은 추가되지 않고 거부된다. BlockingQueue 인터페이스를 구현한 구현체는 여러개가 있지만, ThreadPoolExecutor와 관련된 세 가지는 아래와 같다. SynchronousQueue LinkedBlockingQueue ArrayBlockingQueue SynchronousQueue BlockingQueue의..
VM OPTION에서 XMS와 XMX XMS: 자바 애플리케이션이 실행될 때의 JVM에 할당되는 초기 힙 크기(Initial Heap Size) XMX: JVM에 할당 가능한 최대 힙 크기(Max Heap Size) JVM이 실행될 때 메모리가 XMS에 설정된 값에서 시작하여 최대 XMX에 설정된 값까지 사용 가능하다는 의미이다. 만약 메모리가 XMX를 넘어서면 OutOfMemoryError가 발생하며 자바 애플리케이션이 셧다운된다. 물론 최소 힙 크기(Minimum Heap Size)도 존재한다. 만약 jar를 실행할 때 -xms와 -xmx를 설정하지 않는다면? 오라클 공식문서에 따르면 xms, xmx의 디폴트 값은 아래와 같다. xms: 현재 운영체제에 할당된 메모리의 1/64 xmx: 현재 운영체제..
정적 제네릭 메서드 아래 소스코드의 1,2 번의 정적 제네릭 메서드 중 어떤 것이 정상 작동할까요? public class Generics { public static void print(T t) {} // 1번 public static void print(T t) {} // 2번 } 1번은 컴파일 에러가 발생하고 2번은 정상작동 합니다. 1번은 클래스 레벨에서 제네릭을 사용한다는 의미입니다. 제네릭 메서드에 제네릭 메서드는 호출 시에 파라미터 타입을 지정하기 때문에 2번이 가능합니다. 주의해야 할 점은 Generics 클래스에 지정한 제네릭 타입와 2번 제네릭 메서드에서 지정한 제네릭 타입는 서로 다릅니다. 2번은 메서드 레벨에서 제네릭을 사용한다는 의미이며 클래스 제네릭 타입와 헷갈리므로 보통 겹치지..
Lombok의 @Builder 어노테이션 적용하지 않고 순수 빌더패턴을 사용하는 경우 @Data public class User { private String name; private String address; private int age; public User(Builder builder) { this.name = builder.name; this.address = builder.address; this.age = builder.age; } public static class Builder { private String name; private String address; private int age; public Builder name(String name) { this.name = name; re..
LocalDateTime @SpringBootTest @Slf4j public class DateTest { @Test public void localDateTime() { LocalDateTime now = LocalDateTime.now(); LocalDateTime localDateTime1 = LocalDateTime.of(2017, 1, 14, 10, 34); LocalDateTime localDateTime2 = LocalDateTime.of(2019, Month.MARCH, 28, 14, 33, 48, 0); DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); DateTimeFormatter format..
https://www.blockchain.com/api/blockchain_api Blockchain.com Explorer | BTC | ETH | BCH The easiest and most trusted transaction search engine and block explorer. www.blockchain.com 위 홈페이지에서 특정 API를 호출하면 값이 아래처럼 넘어옵니다. { "addresses": [ { "address": "xpub address", "change_index": 1, "account_index": 91, "final_balance": 12693908, "n_tx": 19, "total_received": 12908908, "total_sent": 215000 } ] }..
ctp102
'Language/Java' 카테고리의 글 목록