zoukankan      html  css  js  c++  java
  • 深入浅出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(),不然会使连接一直处于等待状态。

      

  • 相关阅读:
    POJ3320 Jessica's Reading Problem
    POJ3320 Jessica's Reading Problem
    CodeForces 813B The Golden Age
    CodeForces 813B The Golden Age
    An impassioned circulation of affection CodeForces
    An impassioned circulation of affection CodeForces
    Codeforces Round #444 (Div. 2) B. Cubes for Masha
    2013=7=21 进制转换
    2013=7=15
    2013=7=14
  • 原文地址:https://www.cnblogs.com/jakii/p/5122929.html
Copyright © 2011-2022 走看看