Java 응용 프로그램 내부에서 Java 응용 프로그램의 메모리를 제한 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/19855486

문제

JVM 인수를 사용하여 JVM 힙에 할당 된 메모리를 제한 할 수 있습니다.

프로그램을 실행할 때 명령 줄에 JVM 인수를 추가하는 대신 개발 시간 동안 Java 프로그램 내에서 이러한 값을 하드 코딩 할 수 있는지 알고 싶습니다. 가능합니까?

도움이 되었습니까?

해결책

내 첫 번째 질문은 왜 그것을 설정하고 있습니까? 서버 JVM은 기본 메모리 크기의 최대 1/4를 설정하며 대부분의 응용 프로그램에 적합합니다. 자신의 JVM을 구축하여 이것을 변경하거나 다음과 같은 별명을 만들 수 있습니다.

alias java="java -Xmx30g"

당신이 할 수있는 일은 메모리 사용을 주기적으로 확인하고 더 많이 사용하면 프로세스를 죽이는 것입니다. 이것은 물론 매우 나쁜 생각입니다.

대신 당신이 할 수있는 일은 동일한 인수로 다시 프로그램을 실행하지만 원하는 최대 힙 크기로 다시 실행하는 것입니다. 즉, runtime.exec을 할 수 있습니다.

시작시 최대 메모리 크기를 보유하므로 변경할 수 없습니다.

BTW 힙이 중요한 기억이라는 일반적인 오해가 있습니다. 이것은 JVM, 스레드 스택, 기본 메모리 등으로 사실이 아닙니다. 모두 메모리를 사용하므로 힙을 100MB로 만들 수 있지만 JVM은 300MB를 사용할 수 있습니다.

다른 팁

런타임에 힙 크기를 변경하려고합니까? JVM이 시작될 때 힙 크기 값을 설정하고 변경할 수 없으므로이 작업을 수행 할 수 없습니다.

아니, 당신은 이것을 할 수 없습니다. 당신이 할 수있는 모든 것은 힙 크기를 관리하기 위해 명령 줄에 인수를 추가하는 것입니다.

더러운 솔루션은 힙 크기가 다른 다른 프로세스를 스폰하는 것이지만, 이것이 당신이 찾고있는 것이라고 생각하지 않습니다. 여기 예가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top