2014-02-11 19 views
-3

我知道指針是一個指向內存地址的變量,Java不支持指針,因爲不安全和複雜性問題。那麼如何才能直接在Java中訪問內存尋址?但Java仍然使用內存位置和操作部分。我們不能直接在Java中訪問內存尋址,爲什麼訪問時沒有安全性?在Java中,有多少種方法可以直接/間接訪問內存操作?爲什麼沒有直接訪問內存位置,如Java中的指針?

如果我想編寫一個基於內存管理概念的代碼,那麼我怎樣才能在Java中做到這一點?

避免不直接或間接訪問Java內存位置的實際原因是什麼(除了複雜性或不安全性還有其他原因)?我已經看過谷歌有關這一點,但我無法找到很好的答案。

+0

由於java是因特網編程語言出於安全原因。 –

+0

1.避免黑客攻擊執行Java的服務器。 2.避免地址和指針的威脅。在DS中,C-lang指針也是非常困難的。查看Java DS有多簡單。 - 詳情請參閱:http://way2java.com/java-introduction/java-drawbacks/#sthash.kTUAPPCv.dpuf –

+0

這不是一個好的答案嗎? http://stackoverflow.com/questions/6924236/why-cant-we-use-pointers-in-java而且你總是可以模擬內存管理,在我的操作系統類中,我們必須在純Java中構建一個虛擬機。當然,這不是真正的事情,但它可能已經足以滿足你的想法。 –

回答

0

你已經提到了你自己的安全原因。 Java程序在名爲Java Virtual Machine(JVM)的容器中運行,該容器控制內存管理。這意味着出於安全性和穩定性原因,程序不能直接訪問內存:Java程序不能損害其他進程的內存。

其他原因是垃圾收集。像C++一樣,Java有new關鍵字爲新對象分配內存。但是java沒有delete。不能再使用的對象的移除由GC自動完成。我想這是避免直接內存訪問的一個很好的理由。

順便說一句,即使您在C程序中使用指針,您也無法輕鬆訪問可用於操作系統的整個內存。 OS爲您的進程分配的內存空間本地化的指針。

下一條評論是關於直接訪問java中的內存。你有兩種方法來實現這一點:JNI/JNA集成了java和本地代碼,並且允許訪問JVM託管堆外部的內存。

而最後的評論甚至是問題:你爲什麼需要直接訪問內存?

+0

C背景的人傾向於尋找指針算術,特別是「雙指針」,這通常是在Java中尋找「直接內存訪問」的原因 - 衆所周知,Java不適合這項工作。 – 2014-02-11 07:13:30

+2

我不確定垃圾收集參數。手動內存管理不需要指向實際虛擬內存位置的指針,並且指針在許多與內存管理無關的情況下使用。基本上,C指針可以做很多事情,這是足夠的理由來消除它們。 – juanchopanza

+0

-1,你至少有一半是錯的。你提出有關「安全」的理由根本無效。在現代操作系統上,任何進程都不能訪問另一個進程的內存,而且進程不能訪問「整個內存」。現代系統上的內存是虛擬尋址。 –

相關問題