淺談 C 語言和 Java 的記憶體管理(七)

<< 上一篇

Java 裡的 Non-Static 方法

上一篇我們討論了在 Java 裡函式的參數傳遞行為,也提到了在 Java 裡只有 Call By Value 這一種參數傳遞的方式,而你能傳遞的就只有八種 primitive type 的資料,再加上記憶體地址這九種東西而已。

不過在前一章中,我們討論的也僅止於 static 方法,完全沒提到當呼叫 Instance Method 的時候會發生什麼事情,這次我們就來看一下這個問題。

首先來看一下下面的程式碼:

public class MyObject
{
    int x = 0;

    void setX(int value)
    {
        x = value;
    }

    public static void main(String [] args)
    {
        MyObject object1 ...

Dalvik GC 小記

反正已經追了,就把我之前想到的疑問和從 Dalvik 原始碼裡挖出的答案做一下記錄好了……zzz

Dalvik GC 的演算法

程式碼位於 vm/alloc/MarkSweep.cpp,除了 mark bit 是採用 bitmap 而不是跟隨著 object 本身外,毫無反應,就是個標準的 Mark and Sweep 演算法。

Dalvik 裡 Java 物件怎麼放在記憶體中?

根據 vm/oo/Object.h 的:

379     /*
380      * Total object size; used when allocating storage on gc heap.  (For ...

淺談 C 語言和 Java 的記憶體管理(六)

<< 上一篇

獅子的鬃毛--Java 的物件傳遞是 Call By Reference

傳說拔到獅子的鬃毛,你的 Java 程式行為就會符合預期……別再相信沒有根據的說法了

在上一篇當中,我們提到了 C 語言當中,函式呼叫時他的參數存放的位置,以及 C 語言在傳遞參數給函式時的做法,也知道了 C 語言所有的參數傳遞都是 Call By Value,會把傳進函式的值複製一份到 Stack 上該函式的區域。

接下來的這一篇,我們就來看看在 Java 裡這些事情又是如何運作。

事實上,如果你去翻網路上的文章,甚至是一些書,他們很可能會在討論 Java 的參數傳遞時,告訴你類似下面的內容:

Java 的物件傳遞是 Call By Reference

拜託,下次當你看到一本寫 Java 的書告訴你 Java ...

淺談 C 語言和 Java 的記憶體管理(五)

目錄

<< 上一篇

C 語言程式設計期中考--整數交換

話說如果你曾經在大學修過 C 語言相關課程的話,應該有很大的機會在課堂上或期中考中,看到下面這個考題:

void swap(int x, int y)
{
    int tmp = x;
    x = y;
    y = tmp;
}

int main()
{
    int x = 3;
    int y = 5;

    swap(x, y);

    // 請問下面這一行程式碼會印出什麼
    printf("x = %d, y = %d\n", x, y);
}

當你把這個問題拿去給任何一個稍具經驗的 C Programmer 的話,他會立刻回答你印出來的一定是:

x = 3 ...

淺談 C 語言和 Java 的記憶體管理(四)

Note

2012-04-19 更新影片

感謝 OSDC.tw 2012 的工作人員,今年剛好有一場講的就是 Java 的 GC,而且影片已經出來了。當你看完這篇之後,也可以看看下面這個影片,是非常好的簡介,從很基本的 Garbage Collection 介紹起到目前 OpenJDK 的 GC 現況都有。

為什麼 ...