0

我試圖將Java轉換爲中間語言,並且正在研究如何使用中間語言。我們如何知道設置堆有多大?

我有原來的Java代碼:http://cs.ucla.edu/classes/spring11/cs132/cs132/mj/Factorial.java

而且我有中間代碼表示(蒸汽):http://cs.ucla.edu/classes/spring11/cs132/kannan/vapor-examples/Factorial.vapor

這裏是另一套:在Java中:http://cs.ucla.edu/classes/spring11/cs132/cs132/mj/BubbleSort.java

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

我的問題是,所有的VAPOR代碼都有t.0 = HeapAllocZ(x)(其中xint)。我想知道轉換器如何確定堆大小需要大小爲x。在Factorial.vapor中,它設置爲4。在BubbleSort.vapor中,它設置爲12

謝謝!

+1

大多數人的對象大小隻是做一個快速的,合理的猜測,如果JVM用完堆,增加更多。然後,如果它繼續耗盡大堆,尋找內存泄漏等 – Bohemian

+0

雖然基於什麼?我試圖自動化這個過程,並且我需要一些具體的猜測依據 – pauliwago

+0

@Bohemian - 他似乎在詢問單個對象的大小,而不是所需的堆總數。 –

回答

1

它看起來像HeapAlloc是基於您正在創建的結構的大小(假設412是字節值)。我認爲,看看你的數據結構使用的變量,並計算這些變量總和的字節數將給你分配的數量。

+0

是的,這實際上是Java所做的,只有信息嵌入到在'new'操作中使用的Class對象的引用中。當類被「加載」時,存儲在Class對象中的對象大小被計算(通過基本上總計字段大小)。 –

0

如果您注意到,Java版本的Factorial沒有數據成員。 BubbleSort的Java版本有兩個4字節整數(總共8字節)。

推測對象的「開銷」是4個字節(指向類對象的指針的大小)。

所以階乘有4物體的大小和冒泡有12

相關問題