JAR 파일에서 실행하기 위해 Java Max 힙 크기를 설정할 수 있습니까?

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

  •  06-07-2019
  •  | 
  •  

문제

기본 64MB 최대 힙 크기보다 더 많은 Java JAR 파일을 시작하고 있습니다. 이 앱에는 256MB 힙 크기가 충분합니다. 어쨌든 항아리를 발사 할 때 항상 256MB 최대 힙 크기를 사용하도록 지정해야합니까? (필요한 경우 아래의보다 구체적인 세부 사항.)


이것은 내가 Java로 작성한 명령 줄 앱으로 일부 이미지 조작을 수행합니다. 고해상도 이미지 (약 12 메가 픽셀 이상, 이는 드물지 않습니다)에서는 외부에서 외부인이됩니다.

현재 JAR 파일에서 앱을 시작하고 있습니다.

java -jar MyApp.jar params...

명령 줄에 256MB 최대 힙 크기를 지정하여 OutofMemoryError를 피할 수 있습니다.

java -Xmx256m -jar MyApp.jar params...

그러나 256MB가 고해상도 이미지에서도 충분하다는 것을 알고 있기 때문에 이것을 지정하고 싶지 않습니다. JAR 파일에 해당 정보를 저장하고 싶습니다. 그게 가능합니까?

도움이 되었습니까?

해결책

래퍼와 같은 것을 사용할 수도 있습니다 런치 4J 대부분의 OS : ES에 대한 실행 파일을 만들고 VM 옵션을 지정할 수 있습니다.

다른 팁

다음 줄이 포함 된 배치 또는 쉘 스크립트를 작성하십시오. myapp.jar가 저장되는 폴더에 넣으십시오.

java -Xmx256M -jar MyApp.jar

그런 다음 JAR 파일을 시작하려면 항상이 배치/스크립트 파일을 엽니 다. 그러나 이것은 가상 메모리 크기의 사양을 JAR 파일 자체에 포함시키지 않습니다. 그러나 명령 줄에 종종 동일한 명령을 작성하는 것이 문제를 무시할 수 있습니다.

나는 비슷한 요구가 있었고, 위에서 제안한대로 매니페스트에 이것을 지정할 수 있어야한다고 생각했습니다. 그러나 이것은 불가능합니다. 내 솔루션은 Alex가 위에서 제안한 것과 유사하지만, 내가 한 일은 Java의 프로세스 빌더를 사용하여 다른 Java 프로세스를 시작하는 것이 주요 방법이었습니다. 다른 프로세스를 시작할 때 새 프로세스의 최대 메모리를 지정할 수 있습니다. 당신은 본질적으로 하나의 Java 프로세스가 다른 하나를 시작하고 있습니다. 약간의 호키이지만 작동하지만 여전히 JAR 파일을 두 번 클릭하여 앱을 시작할 수 있습니다. ProcessBuilder를 살펴보십시오.

이것은 좋지는 않지만 실행 가능한 JAR로 가질 수 있으며, 주에서는 특성 파일에 저장된 적절한 매개 변수가있는 비 데몬 스레드로 명령 줄을 통해 자체적으로 실행되도록하십시오. 그런 다음 원본을 종료하십시오. 해당 매개 변수를 기대하는 다른 "실제"입력 점으로 항아리를 실행할 수도 있습니다.

설립하다 답변 구글에서.

그는 JAR 파일에 대해서는 아니요, Javaweb Start에서 예라고 말하며 (아마도 시스템 별) 런처/래퍼 스크립트/앱에서 수행해야한다고 말합니다.

예! 소규모 스타터 프로그램을 작성해야합니다. 저는 소규모 크로스 플랫폼 호환 (경로가 괜찮아 야합니다)을 작성했습니다. 아래를 참조하십시오. 이것은 Windows/Ubuntu/Mac OS X에서 테스트되었습니다.

실행 가능 Java Jar Heep 증가에 대한 조용한 개발 블로그 기사

분명히 이것은 우분투에서 작동합니다

> export _JAVA_OPTIONS="-Xmx1g"

java -jar jconsole.jar & 픽업 _java_options : -xmx1g

그것을하는 방법에는 여러 가지가 있습니다.

메인 항아리를 트리거하는 다른 항아리 파일을 가지고있을 수 있습니다.

또는 항아리를 시작할 배치 파일이 있습니다. 그러나 Say Net에서 다운로드하면 사용자는 스크립트를 실행할 수 있도록 권한을 설정해야합니다.

설치자를 빌드하십시오. Mac에서는 Java 7 용 Oracle Java 앱 Bundler를 사용하여 Java 6 용 Apple App Bundler. 필요한 권한이 설정되지 않으므로 여전히 재분배 할 수 없습니다. 앱 파일 용 DMG를 빌드하십시오. 배포에 사용할 수 있습니다. Windows의 유사한 설치 프로그램

세 번째 기술은 종속성을 잘 포장하고 모든 JVM 인수 등을 설정할 수 있으므로 최고입니다.

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