技术展望
欢迎来到阿八个人博客网站。本 阿八个人博客 网站提供最新的站长新闻,各种互联网资讯。 喜欢本站的朋友可以收藏本站,或者加QQ:我们大家一起来交流技术! URL链接:https://www.abboke.com/jsh/2019/0813/105606.html 1190000020045491
- 1、为什么GraphQL是API的未来
https://baijiahao.baidu.com/s...
GraphQL: 一种用于 API 的查询语言
- 2、Go与Rust比较
https://blog.csdn.net/luoie/a...
golang学习,go语言中文网:《Go周刊》
对比 Go 语言,Rust 有什么优势和劣势?
- 3、编译时、运行时
编译时:编译时就是简单的作一些翻译工作
运行时:代码跑起来,被装载到内存中去了
参考《什么叫编译时和运行时》
- 4、php垃圾回收与内存泄漏
php的COW(copy-on-write 写时复制)
参考官方:https://www.php.Xdebug安装与...
Xdebug安装与使用
//调试可见 xdebug_debug_zval( 'a' );
$a = "new string"; //==> a: (refcount=1, is_ref=0)='new string'
$c = $b = $a; //==> a: a: (refcount=3, is_ref=0)='new string'
unset( $b, $c ); //==> a: (refcount=1, is_ref=0)='new string'
//复合类型
$a = array( 'meaning' => 'life', 'number' => 42 );
/** ==>
a: (refcount=1, is_ref=0)=array (
'meaning' => (refcount=1, is_ref=0)='life',
'number' => (refcount=1, is_ref=0)=42
) **/
引用次数
变量容器在”refcount“变成0时就被销毁。任何关联到某个变量容器的变量离开它的作用域(比如:函数执行结束),或者对变量调用了函数 unset()时,”refcount“就会减1
内存泄漏
清理变量容器的问题(Cleanup Problems)
-- 尽管不再有某个作用域中的任何符号指向这个结构(就是变量容器),由于数组元素“1”仍然指向数组本身,所以这个容器不能被清除 。因为没有另外的符号指向它,用户没有办法清除这个结构,结果就会导致内存泄漏。
-- 如果你要实现分析算法,或者要做其他像一个子元素指向它的父元素这样的事情,这种情况就会经常发生。当然,同样的情况也会发生在对象上,实际上对象更有可能出现这种情况,因为对象总是隐式的被引用。
-- 如果上面的情况发生仅仅一两次倒没什么,但是如果出现几千次,甚至几十万次的内存泄漏,这显然是个大问题。这样的问题往往发生在长时间运行的脚本中,比如请求基本上不会结束的守护进程(deamons)或者单元测试中的大的套件(sets)中。后者的例子:在给巨大的eZ(一个知名的PHP Library) 组件库的模板组件做单元测试时,就可能会出现问题。有时测试可能需要耗用2GB的内存,而测试服务器很可能没有这么大的内存。
回收周期
-- 首先,我们先要建立一些基本规则,如果一个引用计数增加,它将继续被使用,当然就不再在垃圾中。如果引用计数减少到零,所在变量容器将被清除(free)。就是说,仅仅在引用计数减少到非零值时,才会产生垃圾周期(garbage cycle)。
-- 其次,在一个垃圾周期中,通过检查引用计数是否减1,并且检查哪些变量容器的引用次数是零,来发现哪部分是垃圾。
-- 当垃圾回收机制打开时,每当根缓存区存满时,就会执行上面描述的循环查找算法。
当垃圾回收机制关闭时,如果根缓冲区存满了可能根,更多的可能根显然不会被记录。那些没被记录的可能根,将不会被这个算法来分析处理。如果他们是循环引用周期的一部分,将永不能被清除进而导致内存泄漏。