2010-12-10 36 views

回答

13

Java的版本mallocnew - 它創建一個指定類型的新對象。

在Java中,內存是爲您管理的,因此您無法明確地使用deletefree對象。

+0

所以我不能直接訪問內存空間? – java 2010-12-10 01:50:53

+0

不,您無法通過任何理智的方式獲得對Java對象的底層指針/內存地址的訪問。 C#允許您使用`unsafe`關鍵字執行此操作: http://msdn.microsoft.com/en-us/library/chfa2zb8(v=VS.100)。aspx 請注意,這是非常非常少的必要。 – ClosureCowboy 2010-12-10 01:52:09

0

new而不是malloc垃圾回收器,而不是免費的。

4

Java有一個垃圾收集器。這就是爲什麼你永遠也看不到你的代碼語句(這是很好的,如果你問我)

在計算機科學中,垃圾收集 (GC)是自動的 內存管理的一種形式。這是一種特殊的資源管理案例,其中 被管理的有限資源是 內存。垃圾收集器或僅收集器嘗試收回 垃圾,或由 程序不再使用的對象 佔用的內存。垃圾收集是約翰·麥卡錫發明的約爲1959年 發明的 來解決Lisp中的問題。

3

沒有直接對應Java中存在:

Çmalloc創建一個類型化的堆節點,並返回一個指向它允許,但是你想你訪問內存。

Java不具有無類型對象的概念,也不允許直接訪問內存。在Java中最接近malloc的將是new byte[size],但是它會返回一個強類型對象,您只能將其用作字節數組。

C free釋放一個堆節點。

Java不允許您顯式釋放對象。 Java中的對象釋放完全掌握在垃圾回收器的手中。在某些情況下,您可以影響GC的行爲;例如通過將null分配給參考變量並調用System.gc()。但是,這不會強制對象被釋放......並且是一種非常昂貴的方式。

3

如果你沒有好(tm),我想你可以通過JNI接口訪問原始內存。這是您可以從Java程序調用C程序的地方。當然,你必須在你的程序有權這樣做的環境中運行(瀏覽器通常不允許這種情況,除非它是自殺的),但你可以通過C指針訪問對象。

我有點奇怪原來的問題來自何處。很久以前,我完全懷疑C型內存管理和C型指針是不需要的,但在這一點上我是真正的信徒。

相關問題