여러 유명 회사의 다양한 JVM 버전의 최대 메모리를 분석한 결과는 다음과 같습니다. 회사 JVM 버전의 최대 메모리(메가바이트) 클라이언트 최대 메모리(메가바이트) 서버 SUN 1.5. x 1492 1520 SUN 1.5.5(Linux) 2634 2660 SUN 1.4.2 1564 1564 SUN 1.4.2(Linux) 1900 1260 IBM 1.4.2(Linux) 2047 해당 없음 BEA JRockit 1.5 (U3) 1909 1902 달리 지정하지 않는 한 모든 JVM 버전은 Windows 운영 체제에서 실행됩니다. 이 표를 통해 설명하고 싶은 것은 시스템에 메모리가 너무 많으면 예를 들어 Tomcat을 실행하는 경우 여러 개의 Tomcat을 설치하고 클러스터를 생성하는 등의 작업을 통해 시스템 활용도를 높일 수 있습니다. 힙(Heap)과 비힙(Non-heap) 메모리 공식 설명에 따르면 "Java Virtual Machine에는 힙이 있습니다. 힙은 런타임 데이터 영역이며 모든 클래스 인스턴스와 배열의 메모리는 여기에서 할당됩니다. Java 가상 머신이 시작될 때 힙이 생성됩니다. "JVM의 힙 외부 메모리를 비힙 메모리라고 합니다." JVM은 주로 힙과 비힙이라는 두 가지 유형의 메모리를 관리한다는 것을 알 수 있습니다. 간단히 말해서 힙은 Java 코드에 액세스할 수 있는 메모리이며 개발자를 위해 예약되어 있습니다. 비힙은 자체 사용을 위해 JVM용으로 예약된 메모리이므로 메서드 영역 및 JVM 내부 처리 또는 최적화(예: JIT 컴파일된 코드 캐시), 모든 클래스 구조(예: 런타임 상수 풀, 필드 및 메서드 데이터), 메서드 및 생성자에 대한 코드는 모두 오프힙 메모리에 있습니다. 힙 메모리 할당 JVM이 할당하는 초기 메모리는 -Xms로 지정되며, 기본값은 물리적 메모리의 1/64입니다. JVM이 할당하는 최대 메모리는 -Xmx로 지정되며, 기본값은 물리적 메모리의 1/4입니다. 물리적 기억. 기본적으로 사용 가능한 힙 메모리가 40% 미만이면 JVM은 최대 제한인 -Xmx까지 힙을 늘립니다. 사용 가능한 힙 메모리가 70%를 초과하면 JVM은 최소 제한인 -Xmx까지 힙을 줄입니다. -Xms. 따라서 서버는 일반적으로 각 GC 후에 힙 크기를 조정하지 않도록 -Xms 및 -Xmx를 동일하게 설정합니다. 힙이 아닌 메모리 할당 JVM은 -XX:PermSize를 사용하여 힙이 아닌 메모리의 초기 값을 설정합니다. 기본값은 물리적 메모리의 1/64입니다. XX:MaxPermSize는 힙이 아닌 메모리의 최대 크기를 설정합니다. 기본값은 다음과 같습니다. 실제 메모리의 1/4입니다. JVM 메모리 제한(최대값) 우선 JVM 메모리는 실제 최대 물리적 메모리로 제한됩니다(말도 안되는 소리! ㅎㅎ). 물리적 메모리가 무한하다고 가정하면 JVM 메모리의 최대값은 운영체제와 관련이 많습니다. . 간단히 말하면, 32비트 프로세서의 제어 가능한 메모리 공간은 4GB이지만 특정 운영 체제에서는 일반적으로 2GB~3GB로 제한됩니다(일반적으로 Windows 시스템에서는 1.5G~2G, 1.5G). Linux 시스템에서는 G-2G). 2G-3G)이며 64비트 이상의 프로세서에는 제한이 없습니다. 그래서 VM 매개변수 설정으로 인해 프로그램을 시작할 수 없는 주된 이유는 다음과 같습니다. 1) 매개변수의 -Xms 값이 -Xmx보다 크거나, -XX:PermSize 값이 -XX:MaxPermSize보다 큼; 2) - Xmx와 -XX:MaxPermSize 값의 합이 현재 운영 체제의 최대 메모리 한도 또는 실제 물리적 메모리 등 JVM 메모리의 최대 한도를 초과합니다.
여러 유명 회사의 다양한 JVM 버전의 최대 메모리를 분석한 결과는 다음과 같습니다.
회사 JVM 버전의 최대 메모리(메가바이트) 클라이언트 최대 메모리(메가바이트) 서버
SUN 1.5. x 1492 1520
SUN 1.5.5(Linux) 2634 2660
SUN 1.4.2 1564 1564
SUN 1.4.2(Linux) 1900 1260
IBM 1.4.2(Linux) 2047 해당 없음
BEA JRockit 1.5 (U3) 1909 1902
달리 지정하지 않는 한 모든 JVM 버전은 Windows 운영 체제에서 실행됩니다.
이 표를 통해 설명하고 싶은 것은 시스템에 메모리가 너무 많으면 예를 들어 Tomcat을 실행하는 경우 여러 개의 Tomcat을 설치하고 클러스터를 생성하는 등의 작업을 통해 시스템 활용도를 높일 수 있습니다.
힙(Heap)과 비힙(Non-heap) 메모리 공식 설명에 따르면 "Java Virtual Machine에는 힙이 있습니다. 힙은 런타임 데이터 영역이며 모든 클래스 인스턴스와 배열의 메모리는 여기에서 할당됩니다. Java 가상 머신이 시작될 때 힙이 생성됩니다. "JVM의 힙 외부 메모리를 비힙 메모리라고 합니다." JVM은 주로 힙과 비힙이라는 두 가지 유형의 메모리를 관리한다는 것을 알 수 있습니다. 간단히 말해서 힙은 Java 코드에 액세스할 수 있는 메모리이며 개발자를 위해 예약되어 있습니다. 비힙은 자체 사용을 위해 JVM용으로 예약된 메모리이므로 메서드 영역 및 JVM 내부 처리 또는 최적화(예: JIT 컴파일된 코드 캐시), 모든 클래스 구조(예: 런타임 상수 풀, 필드 및 메서드 데이터), 메서드 및 생성자에 대한 코드는 모두 오프힙 메모리에 있습니다. 힙 메모리 할당 JVM이 할당하는 초기 메모리는 -Xms로 지정되며, 기본값은 물리적 메모리의 1/64입니다. JVM이 할당하는 최대 메모리는 -Xmx로 지정되며, 기본값은 물리적 메모리의 1/4입니다. 물리적 기억. 기본적으로 사용 가능한 힙 메모리가 40% 미만이면 JVM은 최대 제한인 -Xmx까지 힙을 늘립니다. 사용 가능한 힙 메모리가 70%를 초과하면 JVM은 최소 제한인 -Xmx까지 힙을 줄입니다. -Xms. 따라서 서버는 일반적으로 각 GC 후에 힙 크기를 조정하지 않도록 -Xms 및 -Xmx를 동일하게 설정합니다. 힙이 아닌 메모리 할당 JVM은 -XX:PermSize를 사용하여 힙이 아닌 메모리의 초기 값을 설정합니다. 기본값은 물리적 메모리의 1/64입니다. XX:MaxPermSize는 힙이 아닌 메모리의 최대 크기를 설정합니다. 기본값은 다음과 같습니다. 실제 메모리의 1/4입니다. JVM 메모리 제한(최대값) 우선 JVM 메모리는 실제 최대 물리적 메모리로 제한됩니다(말도 안되는 소리! ㅎㅎ). 물리적 메모리가 무한하다고 가정하면 JVM 메모리의 최대값은 운영체제와 관련이 많습니다. . 간단히 말하면, 32비트 프로세서의 제어 가능한 메모리 공간은 4GB이지만 특정 운영 체제에서는 일반적으로 2GB~3GB로 제한됩니다(일반적으로 Windows 시스템에서는 1.5G~2G, 1.5G). Linux 시스템에서는 G-2G). 2G-3G)이며 64비트 이상의 프로세서에는 제한이 없습니다.
그래서 VM 매개변수 설정으로 인해 프로그램을 시작할 수 없는 주된 이유는 다음과 같습니다.
1) 매개변수의 -Xms 값이 -Xmx보다 크거나, -XX:PermSize 값이 -XX:MaxPermSize보다 큼; 2) - Xmx와 -XX:MaxPermSize 값의 합이 현재 운영 체제의 최대 메모리 한도 또는 실제 물리적 메모리 등 JVM 메모리의 최대 한도를 초과합니다.
1. 일일 평균 요청량, fullgc 이후 평균 메모리 크기 등 각 애플리케이션의 상황에 따라 다릅니다.
2 최대값은 3/4을 초과하지 않는 것이 좋습니다. 운영 체제 메모리