2014-03-12 56 views
0

我有一個關於這些語言(js/c(C++)/ java)如何處理內存的問題。內存:Java vs C++ vs JS

我知道C及其衍生產品能夠通過圍繞「malloc」等概念的指針和函數進行直接內存管理。

我也知道Java運行在它自己的JRE中,我的理解是虛擬機。爲了澄清,所產生的字節碼與從C源代碼產生的可執行文件等同於J。如果這有助於解釋更好程度

  • 爪哇 - >源代碼編譯成字節碼 - >在JRE運行
  • Ç - >源代碼編譯爲可執行文件 - >運行在O.S.

我的問題是,我知道JS和JavaScript根本就沒有關係。我聽說的是,在90年代命名該語言時,Netscape剛剛跳上了Sun的Java潮流。但是,每個瀏覽器都需要JS引擎,例如Google Chrome的V8 JS引擎。當你聲明和分配變量時,由於js是客戶端,這段內存是否來自系統上爲瀏覽器分配的內存?而且爲了進一步分析,分配給瀏覽器內存中的運行時環境的內存變量是否分配了內存?

我希望我的措辭是有道理的。

+0

這是過時的,但可能會給出一個起點,因爲每個JavaScript引擎都會有些不同:http://www.phreedom.org/research/heap-feng-shui/heap-feng-shui.html –

回答

5

是的。 javascript引擎是瀏覽器的一部分(在這種情況下,javascript可以在其​​他非瀏覽器環境中執行,例如,Google的V8也在Node.js中)。瀏覽器充當javascript的Host environment。 Javascript本身就是一種非常有限的語言(當它的默認API被關注時)。主機環境,瀏覽器是什麼給JavaScript和其他HTML API提供了JavaScript訪問。同樣,Windows中的JScript可以訪問COM提供的一些功能,並且可以訪問Node.js中的服務器API。

基本上,當您在javascript中創建新對象時,javascript會從browswer請求內存,並且瀏覽器向操作系統請求它。

您可以輕鬆地測試:

var array = []; 
var str = 'a simple string that occupies a bit of memory, though not too much.'; 
for (var i = 0; i < 10000000; i++) { 
    array.push(str + '(' + i + ')'); 
} 

執行這個瀏覽器中,打開任務管理器,你會本身在瀏覽器的內存使用量增長。