Memory: Java vs C++ vs JS



我有一个关于这些语言(js/c(c++)/java)如何处理内存的问题。

我知道C和它的衍生物能够通过指针和函数来进行直接的内存管理,这些指针和函数围绕着"malloc"这样的概念。

我也知道Java运行在它自己的JRE,在我的理解是一个虚拟机。需要澄清的是,生成的字节码等同于从os ?如果这有助于更好地解释

  • Java ->源代码编译成字节码->运行在JRE
  • C ->编译成可执行文件的源代码->在os中运行

我的问题是,我知道JS和Java根本不相关。我所听到的是,当在90年代命名这种语言时,网景只是跳上了Sun的Java潮流。然而,每个浏览器都需要一个JS引擎,例如,Google Chrome的V8 JS引擎。当你声明和分配变量,因为js是客户端,这片内存来自系统上分配给浏览器的内存吗?进一步说,这些内存是分配给运行时环境的变量还是分配给浏览器的内存?

我希望我的措辞是有意义的。

是。javascript引擎是浏览器的一部分(在本例中)。Javascript可以在其他非浏览器环境中执行。例如,Google的V8也在Node.js中)。浏览器充当javascript的Host environment。Javascript本身是一种非常有限的语言(当涉及到它的默认API时)。主机环境,即浏览器,使javascript能够访问DOM和其他HTML api。类似地,在Windows中,JScript可以访问COM公开的一些功能,而在Node.js中,则可以访问服务器API。

基本上,当你在javascript中创建新对象时,javascript会向浏览器请求内存,而浏览器会向操作系统请求内存。

你可以很容易地测试:

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 + ')');
}

在浏览器中执行此操作,打开任务管理器,您将看到浏览器的内存使用增长。

最新更新