淺談 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 現況都有。

為什麼 ...

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

Java 也有 Stack / Heap / Pointer 這些東西嗎?

前兩篇文章,我們提到了在 C 語言裡 Stack 與區域變數之間的關係,還有如何用 Pointer 來操作向程式語言 runtime 要回來的 Heap 空間。

你可能會覺得疑惑,這些東西在 Java 當中也有嗎?特別是 Pointer ...

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

Note

這篇文章中的例子講的都是 C 語言,但如果你是寫 Java 的,也誠心的建議你可以耐心地閱讀,就算程式碼看不懂也沒關係。最主要的是要知道這篇文章中講的關於 Heap 的配置、有一種變數存的是記憶體位置……等等的概念,這些事情對你了解 Java 的物件是如何存在記憶體當中相當有幫助。

Heap 是什麼?

上一篇文章中,我們談到了記憶體分為兩種,以及 Stack 與區域變數之間的關係,這一篇文章 ...

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

前言

話說現在寫程式已經不是資訊系的專利了,只要隨便一個路人突然想不開,他就可以跑進書店去買一本什麼 Java 啦、C# 啦或是 Ruby on Rails 的書,然後搖身一變成為一個天天加班的苦命 Web Developer 或是軟體工程師。

這都是拜這些程式語言或框架所賜,幫我們把電腦的底層運作抽象化,並且替我們簡化了非常多的事情,讓我們這些寫程式的人可以專注在思考程式的邏輯,而不是繁瑣的細節操作。

我覺得這是一件好事,但這件事同時也是一體兩面的--抽象化的愈厲害,你愈難知道你的程式究竟在你的電腦做了哪些事情 ...