본문 바로가기

자바9

[Java] Number와 String 특징 정리 - Primitive, Autoboxing, String, StringBuilder, StringBuffer Java Numbers and String 개발 시 성능에 영향을 줄 수 있으므로 꼭 알아야 할 Number와 String의 특징들을 정리해두었다. Numbers Primitive Type & Boxed Primitive Type Primitive type Wrapper class boolean Boolean byte Byte char Character float Float int Integer long Long short Short double Double Java에는 기본 자료형인 Primitive type과 객체로 제공되는 Wrapper class(=Boxed Primitive Type)가 있다. Primitive에서 Boxed Primitive로의 전환(boxing), Boxed Primitive.. 2019. 9. 8.
Java GC(Garbage Collection) Naver D2에 워낙 잘 설명돼있어서 이 페이지만 읽어봐도 GC에 대해 개념을 잡을 수 있다. 이 포스팅은 그냥 내가 읽기 편하려고 Naver D2 포스팅을 요약 정리한 것이다. (마찬가지로 D2에서 올린 Garbage Collection 튜닝도 매우 유익하다.) Java GC(Garbage Collection) Java에서는 개발자가 코드로 메모리를 명시적으로 해제하지 않기 때문에 Garbage Collector가 더는 필요 없는 객체를 찾아 지우는 작업을 한다. Garbage Collector는 'weak generational hypothesis'라는 두 가지 전제 조건에 의해 만들어졌다. 대부분 객체는 금방 접근 불가능 상태(unreachable)가 된다. 오래된 객체에서 젊은 객체로의 참조는 .. 2019. 9. 7.
[JVM] Java 메모리 구조 JVM JVM(Java Virtual Machine, 자바 가상 머신)은 자바 바이트 코드를 실행한다. 일부 프로그램(예를 들어 C로 개발된)은 실행되기 위해 OS에 의해 메모리가 제어되며 실행되는 반면 자바 프로그램은 JVM이 OS로부터 메모리를 할당받아 실행하는 구조이다. 덕분에 OS로부터의 종속이 없어서 널리 사용되고 있다. 이론적으로 모든 자바 프로그램은 CPU와 OS의 종류와 무관하게 독립적으로 동작하는 것을 보장한다. JVM 내부 구조 Runtime Data Area: JVM이 프로그램을 수행하기 위해 OS로 부터 할당받은 메모리 공간이다. Class Loader: Runtime에 컴파일러에 의해 변환된 Byte Code(.class)를 읽어서 JVM내의 Runtime Data Area(메모리.. 2019. 9. 5.
Multi-Thread 환경에서 Spring Bean의 Thread Safe 문제 해결 증상 Netty Server로 받아온 전문을 파싱하는 과정에서 시작점이 자꾸 바뀌어 정상적으로 파싱이 되지 않고 Exception이 발생한다. Single Thread로 설정하여 테스트하면 이러한 현상이 발생하지 않으며 Multi Thread 환경에서 테스트하면 함께 진행되는 다른 Thread의 값과 묘하게 연관 있게 바뀐다. 로그 nioEventLoopGroup7-7 & nioEventLoopGroup-7-8 [nioEventLoopGroup-7-7] Parse item key = MESSAGE_1, type=String, from=220, len=2, value=ne [nioEventLoopGroup-7-8] Parse item key = message_1, type=Long, from=0, len=.. 2019. 9. 2.