高级语言实现的几个点

这两天收集了一些基础知识, 记录下java

内存管理

一般使用 内存对齐方式 (8 字节、16 字节、32 字节),linux

有的值可能只占用两个字节,可是为何还要一次性分配8字节呢.golang

缘由是为了内存的可复用性, 产生更少的内存碎片.算法

new(9) 大于8, 将会使用16字节内存。bash

可是仔细想一想, 8字节 16字节等等过于零散,能够再对内存进行归类组织, 就使用到了 页 的概念。性能

垃圾回收

引用计数

每一个对象拥有一个ref属性,标记引用的次数。ui

缺点

有可能形成循环引用,内存没法释放spa

增一减一 各类环境下要求准确记录, 若是出现不正确计数, 将会引起严重问题操作系统

优势

速度快线程

补偿措施

单独gc算法按期扫描引用链表,进行释放

标记清理

最典型为三色标记法(golang)

代龄

根据对象的生命周期, 标记为 0 1 2 三级代领, 具体参考 java、C#

进程、线程、协程

进程

操做系统分配存储资源的最小单元

线程

程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位(因此一个进程最少一个线程)

协程

在用户空间实现多任务的调度而多任务调度是发生在一个线程上的,咱们把这种机制称之为协程, 由于在一个线程上,协程的本质是串行的。

上下文切换

cpu进程的切换最消耗性能了, 由于整个进程都得保存现场或者恢复现场

线程的切换由于同进程内共享地址空间, 切换相比进程开销要小得多

gdb

软件崩溃后会产生core文件, 默认linux没有开启

ulimit -a

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 32768
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1418
virtual memory          (kbytes, -v) unlimited
 
复制代码

开启命令:

ulimit -c unlimited  #unlimited表示不限制大小
复制代码

若是想要永久生效,能够“ulimit -c unlimited”这一行加到 /etc/profile 文件中去,放到这个文件最后一行便可。

相关文章
相关标签/搜索