JVM GC(1) | 内存结构与GC基础
(下文内容都是针对HotSpot VM) JVM内存结构图示 线程间共享(绿) 线程间独立(蓝) 介绍线程共享 1 方法区(永生代) 存储已经被加载的类信息、static变量. 1.1 同时放置运行时常量,运行期间动态产生的常量也放在这 参数 -XX:MaxPermSize SE8后改为MetaSpace 2 堆 较复杂,见下文 线程独立 栈Sun Hotspot不区分虚拟机栈和方法栈 3 虚拟机栈 (Java Virtual Machine Stacks) Java方法执行的内存模型,类似C++,每个方法调用都会在栈上留下局部变量表,操作数栈,动态链接,方法出口等, 调用完成就出栈 4 本地方法栈 (Native Method Stacks) 作用类似,区别在于为虚拟机执行native方法 5 程序计数器 (Program Counter Register) 记录线程切换时原来代码段的地址 占空间很小 6 直接内存 不在JVM的范围内,就是不用经过JVM管理、映射的直接内存 GC过程四种引用类型 强引用(Strong Reference) ...
负载平衡算法
一些基本的负载平衡算法以下算法,一般都只考虑节点负载的平衡,不考虑cache命中以及session维护 Round Robin / Random (weighted allowed) 特点 每个接受请求的概率相同(与权值正比) simple state fixed weight = stateless dynamic weight = 依赖权值计算的具体方法(可以根据连接数、响应时间、吞吐、内存、CPU等决定权值) 场景 每个处理节点性能差不多 期望低延迟路由,计算量小 Chained Failover 节点成链条,每次只有当前节点无法接受更多时,选择链条的下一个节点。 可以和主从备份相结合 基于某个资源最小的节点 共性: 有状态,需要节点个数 无中心化 sender 去pull receiver的节点负载 receivwe 去 push 负载到 sender 中心化 由中心监控节点负责路由和连接记录 可以弱加权: 连接数差不多时,选权值高的 Least Connection 最小连接(active task)数 特点 优先 ...
分布式系统基础之常见评价指标
在了解分布式之前,先讲述一些一些常见的评价指标。这些概念在之后的系统介绍中将会经常提起。有些中文有些歧义,建议以英文为准。 性能指标 performance 吞吐Throughout: Rate of data transmitted over a communication channel Bytes/s, MB/s, Ops/s QPS(Queries/s) TPS(Transactions/s) 带宽Bandwith: The maximum possible rate of data can be transmitted) highlight the upper bound(Bytes/s, MB/s,) 并发量(degree of) Concurrency: parallelism of workload in a computing system 响应时间latency: (common) round-trip latency(RTT): the total time since a req ...
排序算法
这里列举一下常见排序算法的对比。个人觉得相对重要需要会手写的排序算法还是快速、归并、堆排序、插入,以及借助桶(基数)排序了解桶的思想。其他排序不常用,就是了解概念即可。 冒泡 Bubble Sort 说明 相邻元素的比较和交换来把小的数交换到最前面,过程类似水泡上升 举例: 原始5,3,8,6,4,每一轮都是遍历N-1个元素,然后比较相邻元素,按大小关系交换,如下展示从尾部遍历的第一轮的过程 46比较: 5,3,8,4,6 84比较: 5,3,4,8,6 … 第一轮结束: 3,5,4,8,6 如此反复遍历全数据比较,直至某一轮没法发生交换即排序完成。 复杂度 最好: O(n) 原本有序,一轮结束 最差,平均: O($n^2$) *梳排序 comb sort改进了冒泡排序,改进思想与下文希尔排序类似比较少用,暂时不在这里说明了复杂度有所改进,有兴趣可自己查阅其他资料,如梳排序 - 易百教程 选择 Selection Sort 说明 每次选使得一个元素找到他应该所在的次序位置。 每一趟在剩余元素中选择最值,将其交换至应该存在的位置,直到所有元素排序完成。 保证第i ...