我有一个关于每种语言(js/c(c ++)/ java)如何处理内存的问题.
我知道C及其衍生产品能够通过围绕概念的指针和函数进行直接内存管理,例如"malloc".
我也知道Java运行在它自己的JRE中,据我所知,这是一个虚拟机.为了澄清,生成的字节码是jre等效于从OS的C源代码生成的可执行文件?如果这有助于更好地解释
Java - >源代码编译为字节码 - >在JRE中运行
C - >源代码编译为可执行文件 - >在OS中运行
我的问题是我知道JS和Java完全不相关.我听到的是,在90年代命名语言时,Netscape只是跳上了Sun的Java潮流.但是,每个浏览器都需要一个JS引擎,例如Google Chrome的V8 JS引擎.当你声明并赋值变量时,因为js是客户端,这段内存是否来自系统上为浏览器分配的内存?为了进一步说明,这个内存是分配给浏览器内存中分配给运行时环境的内存中的变量吗?
我希望我这样说的方式是有道理的.
是.javascript引擎是浏览器的一部分(在这种情况下.javascript可以在其他非浏览器环境中执行.例如,Google的V8也在Node.js中).浏览器充当Host environment
javascript.Javascript本身就是一种非常有限的语言(当涉及其默认API时).主机环境,浏览器是什么,提供对DOM和其他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 + ')'); }
在浏览器中执行此操作,打开任务管理器,您将看到浏览器的内存使用量增长.