vue build时控制台报错:
FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
解决办法:
windows平台要用:set NODE_OPTIONS=--max_old_space_size=4096
问了一下chatGPT,node_options --max_old_space_size
是什么东西?
chatGPT答:
--max_old_space_size
是 Node.js 中用于设置 V8 引擎中老生代内存最大值的参数。老生代是 V8 引擎中存储经常使用的对象,因此需要更多的内存空间来存储。 --max_old_space_size
参数用于控制老生代内存大小的上限,以避免程序使用过多的内存而导致性能下降或者程序崩溃。
具体地说,--max_old_space_size=<size>
参数可以设置老生代内存的最大值为 <size>
单位,单位可以是 MB 或者 GB(例如 --max_old_space_size=4096
表示将老生代内存设置为 4GB)。需要注意的是,在设置老生代内存大小时,必须保证该参数的值不超过系统可用内存的大小,否则会导致程序崩溃或者运行失败。
另外,还可以通过在代码中使用 --expose-gc
参数来暴露 V8 引擎中的垃圾回收函数 gc()
,从而手动触发垃圾回收和释放内存。
于是又得到个新名词:新生代,老生代
在 V8 引擎中,内存被划分为两个主要的部分:新生代和老生代。新生代是用于存储短时间存在的对象,而老生代则用于存储长期存在的对象。具体来说:
-
新生代:新生代是一个相对较小的内存区域,通常用于存储那些“临时”的 JavaScript 对象,例如函数调用中的局部变量、瞬时的 DOM 对象等。由于这些对象的寿命很短,因此使用新生代来存储可以更好地提高内存使用效率。
-
老生代:老生代是一个相对较大的内存区域,主要用于存储经常使用并且寿命较长的对象,例如全局对象、闭包、DOM 对象等。由于这些对象需要长时间存活,因此它们需要更稳定的内存存储空间,并且需要进行更加复杂的内存管理。
需要注意的是,在某些情况下,V8 引擎会将新生代中的对象移动到老生代中。例如,当某个对象存活时间超过一定阈值或者新生代内存无法满足对象需求时,V8 引擎就会将该对象移动到老生代中,以便更好地管理和利用内存空间。