0

자바를 중간 언어로 변환하려고 시도 중이며 중간 언어의 작동 방식을 파악 중입니다. 힙을 얼마나 크게 설정할 수 있는지 어떻게 알 수 있습니까?

내가 원래 자바 코드가 있습니다 http://cs.ucla.edu/classes/spring11/cs132/cs132/mj/Factorial.java

을 내가 중간 코드 표현 (증기)이 : 자바 : 증기에서 http://cs.ucla.edu/classes/spring11/cs132/cs132/mj/BubbleSort.java

: http://cs.ucla.edu/classes/spring11/cs132/kannan/vapor-examples/BubbleSort.vapor

다음 http://cs.ucla.edu/classes/spring11/cs132/kannan/vapor-examples/Factorial.vapor

는 다른 세트의

내 질문에 모든 VAPOR 코드는 t.0 = HeapAllocZ(x)입니다 (여기서 x은입니다. 10). 나는 변환기가 힙 크기가 크기 x 일 필요가 있다고 결정하는 방법을 궁금해. 에는 4으로 설정되어 있습니다. BubbleSort.vapor에는 12으로 설정되어 있습니다.

감사합니다.

+1

대부분의 사람들의 객체의 크기를 가지고 있으며, JVM이 힙이 부족하면 더 추가 할 수 있습니다. 그럼 큰 힙이 계속 실행되면 메모리 누수 등을 찾으십시오 – Bohemian

+0

비록 무엇을 기반으로? 나는 프로세스를 자동화하려고 노력하고 있으며, 추측에 대한 구체적인 근거가 필요하다. – pauliwago

+0

@ 보헤미안 - 그는 힙의 총량이 아니라 개별 객체의 크기를 묻는 것으로 보인다. –

답변

1

HeapAlloc은 생성하려는 구조의 크기를 기반으로합니다 (412은 바이트 값임). 귀하의 데이터 구조가 사용하는 변수를 살펴보고 변수의 합계 바이트 수를 계산하면 할당되는 수를 얻을 수 있다고 생각합니다.

+0

네, 이것은 본질적으로 자바가하는 것입니다. 정보 만이'new' 연산에서 사용되는 Class 객체에 대한 참조에 삽입됩니다. Class 객체에 저장된 객체 크기는 클래스가로드 될 때 계산됩니다 (본질적으로 필드 크기를 합산하여). –

0

알아두면 Java 버전 Factorial에는 데이터 멤버가 없습니다. BubbleSort의 Java 버전에는 두 개의 4 바이트 int (총 8 바이트)가 있습니다.

아마도 개체의 "오버 헤드"는 4 바이트 (클래스 개체에 대한 포인터 크기) 일 것입니다.

그래서 계승 4의 객체의 크기를 가지고 있으며, 거품 정렬은 그냥 빨리, 합리적인 추측을 12