검색결과 리스트
분류 전체보기에 해당되는 글 281건
- 2021.07.06 스프링 입문 맛보기 4
- 2021.07.01 java 8 정리11
- 2021.06.30 java 8 정리10
글
스프링 입문 맛보기 4
인프런 강의 4일차.
- 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (김영한 강사님)
1. 자바 코드로 직접 스프링 빈 등록해보기
- @Bean 애노테이션을 통해 직접 스프링 빈 등록이 가능하다.
- Service, Repository 전부 @Bean으로 설정이 가능하나, @Controller는 선언이 불가능하기에 항상 DI로 사용.
- 과거엔 java 코드로 설정하지 않고 xml 문서로 설정하기도 했으나 실무에서 xml 문서로 설정하는 경우는 거의 없다.
package hello.hellospring;
import hello.hellospring.Service.MemberService;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig {
//사용자가 직접 Spring Bean 등록
//Spring이 올라올 때 @Bean에 등록된 빈을 직접 넣어준다.
//@Controller는 어쩔 수 없이 자동 의존관계 선언이 필요하다.
@Bean
public MemberService memberService(){
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository(){
return new MemoryMemberRepository();
}
}
2. Dependency Injection 3가지 방법
- field 주입 : 스프링 최초 실행 때 주입된 내용을 바꿀 수 없기 때문에 사용되지 않음.
- Setter 주입 : setter()를 통해 주입되지만, 누군가 세터를 호출할 수 있게 public으로 열려있어야 하는 단점이 있다. (서비스는 어플리케이션 로딩 중 컨테이너 세팅할 때 바꾸는 것이지 중간에 바뀔 이유가 없기 때문에 public은 단점임)
- Constructor 주입
* 의존관계가 실행중에 동적으로 변경되는 경우는 거의 없기 때문에 Contructor 주입으로 구현하는 것을 권장함.
//필드 주입
@Autowired private MemberService memberService;
//세터 주입
@Autowired
public void setMemberService(MemberService memberService) {
this.memberService = memberService;
}
//생성자 주입
@Autowired
public MemberController(MemberService memberService){
this.memberService = memberService;
}
3. 참고
- 실무에서는 주로 정형화된 컨트롤러, 서비스, 리파지토리 같은 코드는 컴포넌트 스캔을 통해 사용한다.
- 정형화되지 않거나 상황에 따라 구현 클래스를 변경해야하면 @Bean을 통해 스프링 빈으로 등록 후 사용한다.
- @Bean으로 등록한 경우 특정 상황 (예를 들어 DB가 변경될 경우) 해당 @Bean이 호출하는 @Repository만 변경하여 수정이 가능하므로 설정파일 관리가 간단하다.
4. 주의
- @Autowired를 통한 DI는 'helloController', 'MemberService' 등과 같이 스프링이 관리하는 객체에서만 동작한다. 스프링 빈으로 등록하지 않고 내가 직접 생성한 객체에서는 동작하지 않는다.
'Spring 정리' 카테고리의 다른 글
스프링 입문 맛보기 6 (0) | 2021.08.04 |
---|---|
스프링 입문 맛보기 5 (0) | 2021.07.14 |
스프링 입문 맛보기 3 (0) | 2021.05.04 |
스프링 입문 맛보기 2 (0) | 2021.04.29 |
스프링 입문 맛보기 (0) | 2021.04.28 |
설정
트랙백
댓글
글
java 8 정리11
인프런 강의 13일차.
- 더 자바, Java 8 (백기선 강사님)
* Metaspace
- JVM의 여러 메모리 영역 중에 PermGen 메모리 영역이 없어지고 Metaspace 영역이 생겼다.
* Heap 영역 구조
- Young generation(=Eden)
- 객체 대부분이 생성될 때 이곳으로 들어간다.
- 이곳이 가득차면 minor gc가 발생한다.
- minor gc가 발생하면 살아있는 객체들만 체크하고 나머지는 다 없애버린다.
- 살아남은 객체들 중 더 오래 쓸 것 같은 것들은 tenured generation으로 옮긴다.
- Old generation (=tenured generation)
- 이곳이 가득 차면 major gc가 발생한다.
- major gc는 minor gc보다 더 오래 걸린다.
- Permanent generation
- Class의 Meta 정보나 Method의 Meta 정보, Static 변수와 상수 정보들이 저장되는 공간으로 흔히 메타데이터 저장 영역이라고도 한다. 이 영역은 Java 8 부터는 Native 영역으로 이동하여 Metaspace 영역으로 변경되었다.
- 다만, 기존 Perm 영역에 존재하던 Static Object는 Heap 영역으로 옮겨져서 GC의 대상이 최대한 될 수 있도록 하였다
# 기본적인 JVM 구조
+---------+-----+-----+-------------------+ +------+
| Eden | S 0 | S 1 | Tenured | | Perm |
+---------+-----+-----+-------------------+ +------+
<- Young Generation -> <- Old Generation ->
<---------------- Total Heap Size -------->
* Java 7 Hotsop JVM 구조
# Java 7 Hotspot JVM 구조
<---- Java Heap ------> < Permanent Heap > < Native Memory >
+------+---+---+-------+------------------+--------+--------+
| Eden | S | S | Old | Permanent | C Heap | Thread |
| | 0 | 1 | | | | Stack |
+------+---+---+-------+------------------+--------+--------+
* Java 8 Hotspot JVM 구조
# Java 8 Hotspot JVM 구조
<---- Java Heap ------> <--------- Native Memory ---------->
+------+---+---+-------+------------------+--------+--------+
| Eden | S | S | Old | Metaspace | C Heap | Thread |
| | 0 | 1 | | | | Stack |
+------+---+---+-------+------------------+--------+--------+
* Java Heap: JVM이 관리하는 영역
* Native Memory: OS에서 관리하는 영역
* GC 범위
+------+---+---+------------------+ +--------+
| Eden | S | S | Tenured | | Perm |
| | 0 | 1 | | | |
+------+---+---+------------------+ +--------+
<- Young Gen -> <--- Old Gen ----> <------->
Minor GC Full GC Full GC
<-------------- GC 대상 범위 ---------------->
1. PermGen
- permanent generation, 클래스 메타데이터를 담는 곳.
- Heap 영역에 속함
- 기본값으로 제한된 크기를 가지고 있음.
- -XX:PermSize=N, PermGen 초기 사이즈 설정
- -XX:MaxPermSize=N, PermGen 최대 사이즈 설정
2. Metaspace
- 클래스 메타데이터를 담는 곳.
- Heap 영역이 아니라, Native 메모리 영역이다.
- 기본값으로 제한된 크기를 가지고 있지 않음. (필요한 만큼 계속 늘어난다)
- Java 8부터는 PermGen 관련 java 옵션은 무시한다.
- -XX:MetaspaceSize=N, Metaspace 초기 사이즈 설정
- -XX:MaxMetaspaceSize=N, Metaspace 최대 사이즈 설정
'Java 정리' 카테고리의 다른 글
Singleton 패턴, JAVA에서의 응용과 이해 (4) | 2024.01.29 |
---|---|
java 8 정리10 (0) | 2021.06.30 |
java 8 정리9 (0) | 2021.06.17 |
java 8 정리8 (0) | 2021.06.02 |
java 8 정리7 (0) | 2021.05.26 |
설정
트랙백
댓글
글
java 8 정리10
인프런 강의 12일차.
- 더 자바, Java 8 (백기선 강사님)
1. 배열 Parallel 정렬
- Arrays.parallelSort()
> Fork/Join 프레임워크를 사용해서 배열을 병렬로 정렬하는 기능을 제공한다.
2. 배열 정렬 알고리즘
- 배열을 계속 둘로 쪼갠다.
- 합치면서 정렬한다.
3. Sort()와 Parallel() 비교
package me.whiteship.java8to11;
import java.util.Arrays;
import java.util.Random;
import java.util.stream.IntStream;
public class App {
public static <List> void main(String[] args) {
int size = 1500;
int[] numbers = new int[size];
Random random = new Random();
IntStream.range(0, size).forEach(i -> numbers[i] = random.nextInt());
long start = System.nanoTime();
Arrays.sort(numbers); //sort는 쓰레드를 1개만 쓴다.(java는 퀵소트를 사용함)
System.out.println("serial sorting took " + (System.nanoTime() - start));
IntStream.range(0, size).forEach(i -> numbers[i] = random.nextInt());
start = System.nanoTime();
Arrays.parallelSort(numbers); //반으로 쪼개고 소팅하고 합치는 과정 반복
System.out.println("parallel sorting took " + (System.nanoTime() - start));
}
}
- serial sorting : 548957
- parallel sorting : 364074
- 알고리즘 시간복잡도는 같다 : O(n logN) 공간 O(n)
'Java 정리' 카테고리의 다른 글
Singleton 패턴, JAVA에서의 응용과 이해 (4) | 2024.01.29 |
---|---|
java 8 정리11 (0) | 2021.07.01 |
java 8 정리9 (0) | 2021.06.17 |
java 8 정리8 (0) | 2021.06.02 |
java 8 정리7 (0) | 2021.05.26 |