본문 바로가기
백준/PS에서의 자바

메모리 제한 풀기

by lms0806 2023. 2. 9.
728x90
반응형

백준 문제를 풀다보면, "메모리 초과" 일명 "메초"라고 불리는 result를 받을 수 있습니다.

그럴때마다 보통은 "사용하지 않아도 되는 배열 및 메모리 감소"를 하여 "메모리 초과"를 해결합니다.

그러나, 그렇게 해도 되지 않는 몇몇 외국어 문제들이 존재합니다.

그런 경우에는 2가지 방법이 있습니다.

 

1. System.gc()로 gc를 수동으로 실행하기

System.gc();

System.gc()는 반환이 없는 void로 그냥 선언하시면 됩니다.

이렇게 할 경우, 더 이상 사용하지 않은 메모리들을 수동으로 gc를 실행시켜 제거해 줍니다.

(보통은 선언하지 않고 사용해도 JAVA는 자동으로 GC가 처리를 해줍니다.)

 

※ 주의 : PS에서만 사용하시고, 실제 현업에서는 사용하지 마세요.

https://codingdog.tistory.com/entry/java-systemgc-%ED%95%A8%EC%88%98-%EC%93%B0%EC%A7%80-%EB%A7%90%EC%95%84%EC%95%BC-%ED%95%A0-%EC%A0%95%EB%8F%84%EB%A1%9C-%EB%AC%B4%EA%B2%81%EB%8B%A4

 

java system.gc 함수 : 쓰지 말아야 할 정도로 무겁다.

System.gc 함수를 쓰지 말라는 이야기는 많이 듣곤 합니다. 왜 그럴까요? 예제 프로그램을 보겠습니다. class A가 있고, 이 클래스 내부에는 finalize가 오버라이딩 되어 있습니다. 이 메서드 안에 들어

codingdog.tistory.com

현업에서 사용하지 않아야 하는 이유는 해당 블로그를 참조하시면 될거 같습니다.

 

참고로 보통 알고리즘 문제들은 System.gc() 없이도 풀리는 문제들입니다. System.gc()를 활용해야만 풀리는 문제는 JAVA로의 풀이를 생각하지 않고 만든 문제라고 생각하시면 될거 같습니다.

외국어 문제를 푸는데 JAVA로 맞은 사람이 없거나, 저밖에 없는 경우 인데 "메모리 초과"가 발생하면 해당 방식을 사용하시면 될거 같습니다.

 

ex)

같은 시간, 다른 메모리

1줄 System.gc()를 testcase마다 실행해서 메모리를 줄인 방법입니다.

 

 

2. BufferedReader에 제한 걸기

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 기존 입력 

BufferedReader br = new BufferedReader(new InputStreamReader(System.in), 1 << 16); // 버퍼 사이즈 제한

1 << 16으로 버퍼 제한을 걸면 특정 크기만큼만 읽어올 수 있습니다.

"JAVA Fastio"라고 검색하시면 나오는 소스들 중 대부분이 BUFFER_SIZE = 1 << 16;이라고 선언하고 사용합니다.

 

 

728x90
반응형

'백준 > PS에서의 자바' 카테고리의 다른 글

int[] 활용하기  (2) 2022.01.07
[JAVA] PS에서의 Point  (0) 2021.11.01
[JAVA] 출력 관련(백준)  (2) 2021.10.28

댓글