一、GIL全局解释器锁 cpython中自带的GIL全局解释器,GIL本身就是一把互斥锁 重点: 其实就算我们在程序中写了一个线程的并行操作,实际上GIL会因为垃圾回收机制的问题,操作系统调度的问题,会把并行的线程还是变成了串行,这正是这个GIL全局解释器锁导致了同一进程的同一时刻只有一个线程在运行 ...
分类:
其他好文 时间:
2019-09-22 22:04:41
阅读次数:
127
线程锁 当线程t1,刚拿到x,还未进行加值和赋值操作的时候,就被CPU切走了,这时t1的x保存的是刚拿到数据的状态;然后线程t2开始加值操作,当t2被CPU切走时,x已经加了很多次了,但是t1的x还是原来的数据,然后线程t1重新开始加值操作,还是用原先x的数据,造成了数据安全的问题, 所给线程加一把 ...
分类:
编程语言 时间:
2019-09-22 19:34:33
阅读次数:
100
目的:写给自己看的,不如其他大神全,以后慢慢修修改改 一:如何判断数据是否垃圾数据 1.引用计数法 当创建一个对象时,为此对象分配一个引用计数器。当有其他对象引用这个对象时,计数器就+1。当引用失效了,计数器-1。 当一个对象的引用计数器=0时,此对象就可以被回收。 优点:原理简单,实现方便。 缺点 ...
分类:
其他好文 时间:
2019-09-21 23:40:15
阅读次数:
125
1.标记-清除算法(Mark-Sweep) 对内存中的对象依次的进行判断,如果对象仍然需要使用那么就打一个标记保留下来。这样经过一次迭代之后,所有的对象都会被筛选判断一次。紧接着会对内存中已经标记的对象依次进行清除。但是这样会导致结果存在很多的内存碎片。 2.复制算法(Copying) 通过根搜索算 ...
分类:
编程语言 时间:
2019-09-21 21:38:55
阅读次数:
95
记一次有关于Jvm垃圾收集器的整理 垃圾回收器 算法: 引用计数法 复制算法 标记清楚 标记整理 垃圾回收的方式 1、Serial:串行回收 2、Parallel:并行回收 3、CMS:并发标记清除 4、G1:G1 截止到java10 之后有ZGC Seial:串行垃圾回收,单线程垃圾回收的时候会停 ...
分类:
其他好文 时间:
2019-09-21 21:18:26
阅读次数:
102
程序在运行的过程需要开辟内存空间,比如创建一个对象需要一片内存空间,定义变量需要内存空间。有内存的开辟,势必也要有内存的释放,不然只进不出那不是貔貅了吗?即使有开辟有释放在短期内还是会有垃圾内存的存在。 ...
分类:
编程语言 时间:
2019-09-21 17:29:55
阅读次数:
77
PHP5的内存管理 对象传递 PHP5使用了Zend引擎II,对象被储存于独立的结构Object Store中,而不像其它一般变量那样储存于Zval中(在PHP4中对象和一般变量一样存储于Zval)。在Zval中仅存储对象的指针而不是内容(value)。当我们复制一个对象或者将一个对象当作参数传递给 ...
分类:
Web程序 时间:
2019-09-21 15:33:41
阅读次数:
118
1.特点 跨平台(操作系统) 面向对象 简单性(多继承,指针) 健壮性(垃圾回收,异常处理) 多线程 大数据开发相关 2.运行机制 1. JVM(JAVA 虚拟机 Virtual Machine),可以在平台上用自带虚拟机翻译成对应语言。 JVM 把源文件.java 编译成字节码.class 2. ...
分类:
编程语言 时间:
2019-09-20 16:51:19
阅读次数:
64
如果对象的引用被置为null,垃圾收集器是否会立即释放对象占用的内存?垃圾回收的目的是识别并且丢弃应用不再使用的对象来释放和重用资源。当对象在JVM运行空间中无法通过根集合到达(找到)时,这个对象被称为垃圾对象,这个对象就可以被回收了。根集合是由类中的静态引用域与本地引用域组成的,JVM通过根集合索引对象。在释放对象占用的内存之前,垃圾收集器会调用对象的finalize()方法,一般建议在该方法中
分类:
编程语言 时间:
2019-09-16 17:56:16
阅读次数:
108
在 Java9 中,G1 GC 将成为默认的垃圾收集器,G1 垃圾收集器的关键特性之一是能够在不牺牲吞吐量的同时,限制 GC 暂停时间(即可以设置所需的最大停顿时间)。 由于 G1 GC 正在逐渐成为默认的垃圾收集器,它的使用与关注度也会逐渐增加。因此在调整 JVM 大小和排查问题的情况下,必须先理 ...
分类:
其他好文 时间:
2019-09-16 12:03:39
阅读次数:
108