• 深入浅出node读书笔记(五)


      本篇文章说说JavaScript在v8引擎里面内存管理的相关问题。

      (1)从本质来讲,node是基于v8引擎才开发出来的,v8在给node带来一系列有点之余,也带来了一些缺陷,比如内存限制就是一个方面。因为v8的限制,node在64位机器下只能使用1.4G的内存,在32位机器下更是只能使用0.7G。v8进行内存限制是为了防止在垃圾回收时候所用时间过长导致卡顿。这在文章下边会有介绍。

      (2)所有的JavaScript对象都是通过堆来进行内存分配的,v8在最开始的时候有一个申请好的一块堆内存,创建js对象时候就是用该堆进行分配,如果已申请好的堆不够分配给新对象,就会接着申请堆,直至到达v8的限制内存上限。

      (3)v8的垃圾回收机制:分代式垃圾回收机制。

        在v8中,主要将内存分为两种:新生代中的对象存活时间较短,老生代中的对象存活时间较长或者常驻内存的对象。

        新生代内存对象垃圾回收算法:Scavenge算法:堆内存一分为二,一半使用(from空间),一半闲置(to空间),分配对象时候只分配到from空间,垃圾回收时候把from空间活着的对象拷贝到to空间,两者互换角色。缺点:只使用了堆内存的一半

        晋升:当一个对象多次复制依然存活时候,会被移动到老生代进行管理。这叫做晋升。晋升依据有两个:该对象是否经过Scavenge回收、to空间的占用比例是否超过25%,如果超过,不利于变成from空间后的对象分配。

        老生代内存对象垃圾回收机制:Mark-Sweep和Mark-Compact算法。即标记清除算法。第一个算法是遍历老生代内存中的对象,把活着的标记起来,把死的清除掉。但是会造成内存空间的不连续碎片,第二个算法是在标记的时候把活着的对象移动到同一边,把另一边的清除。

      注意:在进行垃圾回收时候会让js应用逻辑暂停,称为‘全停顿’,有一些方法缓解,此处不做讨论。

      

      接下来说说http协议的在node里面一些很基础的知识:

      (1)在node中有一个http模块,用来构建web服务。它将所用的套接字的读写抽象为ServerRequest和ServerResponse对象,分别对应请求和响应操作,当请求发生时候,http模块拿到连接中传来的数据,调用二进制模块http_parse来解析数据。

      (2)ServerRequest对象:

      (3)ServerResponse:结构与上边的类似,响应报文头部需要setHeader()和writeHeader()方法来写入  

               res.writeHead(200, {'Content-Type': 'text/plain'}); 

       报文体部分用res.write()和res.end()来写,当要关闭连接时候一定要调用用res.end(),不然会使连接一直处于等待状态。

      

  • 相关阅读:
    C# 注册Dll文件
    WPF强制设置TextBox文本框的焦点
    WPF中MVVM模式下控件自有的事件绑定
    第2章 数字之魅——数字中的技巧2.8
    具体数学斯特林数-----致敬Kunth
    一个数的约数(个数。约数和)
    hdu 1796 How many integers can you find 容斥定理
    读贾志鹏线性筛有感 (莫比乌斯函数的应用)
    欧拉函数小结
    莫比乌斯函数
  • 原文地址:https://www.cnblogs.com/jakii/p/5122929.html
Copyright © 2020-2023  润新知