2012-12-08 1 views
5

Possible Duplicate:
Is it possible to dynamically change maximum java heap size?코드 자체에서 Java 힙 공간을 늘릴 수있는 방법이 있습니까? 내가 아는

는 자바 실행을위한의 -Xmx 옵션이 있지만, (자신의 힙을해야합니다 내 코드를 실행하는 모든 컴퓨터가 증가되도록) 대신에이 작업을 수행 전처리 지시어의 어떤 종류가있다.

현재 java.exe는 최대 280MB까지만 도달 할 수 있습니다 (충돌하기 전에) -이게 정상입니까?

+0

관련 : http://stackoverflow.com/questions/193483/how-to-specify-jvm-argument-for-maven-built-executable-jar –

+3

* "Java 힙을 늘릴 수있는 방법이 있나요 코드 자체에 공간이 있습니까? "* 아니오 - 코드가로드되면 사용 가능한 메모리가 이미 설정되어 있습니다 (돌 있음). 한 가지 해결책은 현재 VM에서 메모리를 확인하는 것입니다. 충분하지 않으면 1) 더 많은 메모리가있는 새로운 '프로세스'를 실행하십시오. 2) 종료하십시오. –

+0

@Andrew Thompson : "더 많은 메모리가있는 새로운 프로세스 시작"이 코드에서 수행 할 수 있습니까? –

답변

1

예. 이 단순한 예를 보라.

import java.awt.EventQueue; 
import javax.swing.JOptionPane; 
import java.io.File; 

class BigMemory { 

    public static void main(String[] args) throws Exception { 
     if (args.length==0) { 
      ProcessBuilder pb = new ProcessBuilder(
       "java", 
       "-Xmx1024m", 
       "BigMemory", 
       "anArgument" 
       ); 
      pb.directory(new File(".")); 
      Process process = pb.start(); 
      process.waitFor(); 
      System.out.println("Exit value: " + process.exitValue()); 
     } else { 
      Runnable r = new Runnable() { 
       public void run() { 
        JOptionPane.showMessageDialog(
         null, 
         "Max Memory: " + 
         Runtime.getRuntime().maxMemory() + 
         " bytes."); 
       } 
      }; 
      EventQueue.invokeLater(r); 
     } 
    } 
} 
3

대답은 "아니오"입니다.

시작시 메모리 크기가 JVM으로 전달됩니다. JVM 내부에서 실행되는 코드는이를 변경할 수 없습니다.

JVM이 Java 바이트 코드를 실행할 수있는 java로 작성되지 않은 프로그램이기 때문에 생각하면됩니다. IT 부서는 자바 코드가 컨테이너를 제어하도록 허용하는 것이 안전하지 않을 것이다.

+0

XMX 경로를 실행하려면 어떤 Java 실행 파일이이 시작 속성을 추가해야합니까? ... 난 방금 java.exe를 검색했고 약 2 개의 결과를 얻었습니다. –

+0

또는이 항목을 입력해야합니까? cmd.exe에? –

+0

명령 줄 옵션이어야합니다. 그것은 당신이 세계적으로 설정할 수있는 것이 아닙니다. a) 컴퓨터에 메모리가 많지 않거나 가능성이 높음 b) "충돌"에 대해 구체적이지 않은 것처럼 문제가 생각한 바가 아님. IMHO 충돌은 처리되지 않은 신호가 있고 오류 또는 예외가 아닌 덤프 파일이 기록됨을 의미합니다. –

1

늘릴 수 있다면 최대 값은 아닙니다.

증가시킬 수없는 이유는 시작시 할당된다는 것입니다. JVM이 시작되기 전에 만 설정할 수 있습니다.

당신이 할 수있는 것은 응용 프로그램을 더 높은 최대와 비교하는 것입니다. 예 : 처음에는 최대 값을 확인하고, 최대 값이 아니면 다른 프로그램과 동일한 프로그램을 실행합니다.

참고 : 오프 힙 메모리를 사용하는 경우 최대 값의 일부가 아니기 때문에 더 많은 GB 또는 TB가 될 수 있습니다.

As it is right now, java.exe reaches ~280MB max only (before it crashes) - is this normal?

충돌은 아무것도 그냥 아무것도 할 수있는 이유에 대해 의미 할 수 있습니다. 나는 그것이 왜 작동하지 않는지에 대해 더 자세히 조사 할 것을 권하고 당신이 최대의 메모리는 문제가 아니라는 것을 알게 될 것이라고 생각합니다. (최소 1GB 컴퓨터가없는 경우 기본 최대 메모리는 약 250MB입니다.)

+0

어디에서 XMX 속성을 입력해야합니까? JVM 명령 줄을 찾을 수 없습니다. 아마도 최대 힙 크기 이외의 다른 것이 여기에있는 것이 옳을 것입니다. –

+0

명령 줄에서만 설정할 수 있습니다. Java 프로그램은 어떻게 실행하고 있습니까? 얼마나 많은 메인 메모리가 있습니까? –

+0

16GB, cmd에 입력 할 때.exe, java가 내부 또는 외부 명령으로 인식되지 않습니다. –