2012-04-06 4 views
0

스와핑을 줄이기 위해 Java 응용 프로그램의 메모리 사용량을 줄이려고합니다. 이 목적을 위해 스택 크기 (Xss 매개 변수)를 줄이는 방법에 대해 생각해 보았지만 스택 메모리가 할당되는 방법과 스레드 당 기본 512k (32 비트 OS 용)가 항상 얼마나 많은 메모리가 있는지 상주 메모리에 있는지 여부는 확실하지 않았습니다. 실제로 사용되었습니다.Java는 메모리를 절약하기 위해 스택 크기를 줄입니다.

스택 메모리가 감소하면 스와핑이 줄어 듭니까?

업데이트 : 신청서의 프로필을 제안하지 마십시오. 이미 완료되었습니다.

+1

스택 크기를 믿고 당신을 이끌 것을 문제는 무엇입니까? – JaredPar

+0

문제는 충분한 램이없고 메모리를자를 필요가 있고 힙이나 퍼머 젠에서자를 수있는 방법이 보이지 않는다는 것입니다. –

+2

이 문제를 해결하기위한 첫 번째 단계는 어플리케이션을 프로파일 링하는 것입니다. 메모리를 차지하고있는 것을 알기 전까지는 본질적으로 추측하고 존재하지 않는 문제에 시간을 소비 할 가능성이 높습니다. 프로파일 러는 응용 프로그램에서 메모리를 차지하는 것에 대한 직접적인 정보를 제공하며 아마도 그렇게 할 것으로 예상하지는 않습니다. – JaredPar

답변

0

예는 물론 그 LIFO의 첫 번째 아웃 마지막 규칙 덜 스택을 덜 사용하고 얼마나 많은 저장해야합니까 얼마나 많은 메모리

0

을 바꿀 것인가? 스택은 512K 스레드 당이기 때문에

는, 당신이 '매우 자주'I 될 것입니다 (100MB의) 스택 메모리의 사용 이후

절약 가치가있을 수도 있습니다 값을 입력 시작 200 개 스레드를 필요 의미 그것은 바꿔 치기를위한 나쁜 표적이라고 생각할 것입니다. 메모리가 제한된 환경을 다루지 않는다면?

+0

정확히, 메모리가 제한된 환경입니다. –

+0

젠장, 언급하는 것을 잊어 버렸습니다. 가장 쉬운 방법은 시도하고 실제로 도움이되는지 확인하는 것입니다. 귀하의 앱이 640MB를 사용하도록 설정되어 있지만 대상 컴퓨터에 얼마나 많은 메모리가 있습니까? – pimaster

+0

이것은 계산하기 어렵습니다. 메모리 소비량이 덜 정의 된 다른 프로세스도 실행 중입니다. 게다가 운영 체제 자체가 얼마나 많은 메모리를 필요로하는지 말하는 것은 어렵습니다. –

5

몇 개의 스레드를 실행하고 있습니까? 엄청난 수의 스레드와 아주 큰 스택 크기 (예 : 10k 스레드 및 256KB 스택 크기)가 있어도 힙 공간은 2GB에 불과합니다.

당신은 32 비트 JVM에서 실행 중이므로 비교적 작은 시스템이라고 가정합니다. 몇 가지 옵션이 있습니다 :

  • 64 비트 JVM으로 전환하십시오. 이제 주소 공간이 많아지고 스택 크기는 중요하지 않아야합니다.

  • 컴퓨터가 너무 작습니다. 2gb 스택이 10k + 쓰레드에서 문제가된다면 너무 작은 "머신"에서 너무 큰 애플리케이션을 실행하고있는 것입니다. 문제는 다른 곳에 실제로 당신이 잘못 짚었하는 스레드 수를 감소

  • 을 더 많은 하드웨어

  • 을 소프트웨어에서 더 적은을하거나 구매

+0

OP는 주소 공간이 부족하지 않고 물리적 메모리가 부족하다는 것을 의미하는 스와핑이라고 주장합니다. 64 비트로 전환하지 않으면 문제가 악화 될까? – trutheality

+0

메모리가 부족한 환경입니다. Xmx 값은 640MB입니다. 수백 개의 스레드가 있습니다. –

+1

@Artiom * 수백 개의 스레드가 있습니까? 꽤 강력한 서버 만이 많은 수의 스레드를 동시에 서비스 할 수 있습니다. ThreadPools를 살펴 봐야 할 것입니다. – Voo

관련 문제