- 博客(20)
- 收藏
- 关注
原创 深入学习Redis(一)——概述
什么是redisRedis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。另
2021-09-02 20:08:07 168
原创 深入理解JVM——常见垃圾收集器
如果说收集算法是内存回收的方法论, 那垃圾收集器就是内存回收的实践者。 《Java虚拟机规范》 中对垃圾收集器应该如何实现并没有做出任何规定, 因此不同的厂商、 不同版本的虚拟机所包含的垃圾收集器都可能会有很大差别, 不同的虚拟机一般也都会提供各种参数供用户根据自己的应用特点和要求组合出各个内存分代所使用的收集器。一、串行收集器:Serial收集器最古老,最稳定 简单而高效 可能会产生较长的停顿 -XX:+UseSerialGC 新生代、老年代都会使用串行回收 新生代复制算法
2021-07-22 04:37:01 216
原创 深入理解JVM——内存回收与GC算法
目录哪些内存需要回收一、判断对象是否存活什么时候回收如何回收1. 标记 - 清除算法2.标记-复制算法3. 标记 - 整理算法GC的历史比Java久远,1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言。当Lisp还在胚胎时期时,人们就在思考GC需要完成的3件事情:哪些内存需要回收? 什么时候回收? 如何回收?内存区域中的程序计数器、虚拟机栈、本地方法栈这3个区域随着线程而生,线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出
2021-07-22 04:16:56 398
原创 深入理解JVM——JVM内存结构
目录Java 堆(Heap)方法区(Method Area)Java 虚拟机栈(JVM Stacks)程序计数器(Program Counter Register)本地方法栈(Native Method Stacks)JVM 内存结构是指:Java 虚拟机定义了若干种程序运行期间会使用的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁,另一些则与线程一一对应,随着线程的开始而创建,随着线程的结束而销毁。具体的运行时数据区如下图所示:在 Java...
2021-07-22 03:47:27 186
原创 Java并发原理(八)——JVM锁优化
目录JVM锁的优化自旋锁自适应自旋锁锁消除偏向锁轻量级锁锁的优缺点对比Synchronized与Lock如何解决死锁?JVM锁的优化简单来说在JVM中monitorenter和monitorexit字节码依赖于底层的操作系统的Mutex Lock来实现的,但是由于使用Mutex Lock需要将当前线程挂起并从用户态切换到内核态来执行,这种切换的代价是非常昂贵的;然而在现实中的大部分情况下,同步方法是运行在单线程环境(无锁竞争环境)如果每次都调用Mutex Lock
2021-07-07 02:42:26 137
原创 Java并发原理(七)——Synchronized详解
Synchronized的使用在Java中,synchronized关键字是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行。synchronized既可以加在一段代码上,也可以加在方法上。在应用Sychronized关键字时需要把握如下注意点: 一把锁只能同时被一个线程获取,没有获得锁的线程只能等待; 每个实例都对应有自己的一把锁(this),不同实例之间互不影响;例外:锁对象是*.class以及synchronized修饰的是sta
2021-07-07 02:33:05 194
原创 Java并发原理(六)——JUC原子类:CAS及原子类
什么是CASCAS的全称为Compare-And-Swap,直译就是对比交换。是一条CPU的原子指令,其作用是让CPU先进行比较两个值是否相等,然后原子地更新某个位置的值,经过调查发现,其实现方式是基于硬件平台的汇编指令,就是说CAS是靠硬件实现的,JVM只是封装了汇编调用,那些AtomicInteger类便是使用了这些封装后的接口。 简单解释:CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较下在旧值有没有发生变化,如果没有发生变化,才交换成新值,发生了变化则不..
2021-07-07 02:23:39 207
原创 Java并发原理(五)——volatile作用详解
目录保证有序性实现可见性保证原子性:单次读/写保证有序性Volatile保证有序性(禁止指令重排序优化,jkd1.5以后重新修复):先行先发生原则中volatile变量规则:对一个volatile变量的写操作先行发生于(能被后面的读操作感知到)后面(时间上)对这个变量的读操作。通过内存屏障(Memory Barrier)实现,指令重排序时不能把后面的指令重排序到内存屏障之前的位置。从一个最经典的例子来分析重排序问题。在并发环境下的单例实现方式,我们通常可以采用双重检查加锁(DCL)的
2021-07-07 02:11:25 141
原创 Java并发原理(四)——Java内存模型
概述由于计算机的存储设备与处理器的运算能力之间有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(cache)来作为内存与处理器之间的缓冲:将运算需要使用到的数据复制到缓存中,让运算能快速进行,当运算结束后再从缓存同步回内存之中没这样处理器就无需等待缓慢的内存读写了。Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样底层细节。此处的变量与Java编程时所说的变量不一样,指包括了实例字段、静态字段和
2021-07-07 01:58:03 85
原创 Java并发原理(三)——线程的实现与调度
线程的实现内核线程(KLT)就是直接由操作系统内核支持的线程,这种线程由内核来完成线程切换。程序一般不会直接去使用内核线程,而是去使用内核线程的一种高级接口—轻量级进程(LWP),轻量级进程就是我们通常意义上所讲的线程,每个轻量级进程都是由一个内核线程支持(关系为1:1);对于Sun JDK来说,它的Window版与Linux版都是使用一对一的线程模型实现的,一条Java线程就映射到一条轻量级进程中。Java线程调度一般线程调度模式分为两种——抢占式调度和协同式调度(非抢占式)。抢占式调度(
2021-07-07 01:51:12 140
原创 Java并发原理(二)——线程基础
目录线程状态转换线程中断线程使用方式线程状态转换新建(New)创建后尚未启动。可运行(Runnable)可能正在运行,也可能正在等待 CPU 时间片。包含了操作系统线程状态中的 Running 和 Ready。阻塞(Blocking)等待获取一个排它锁,如果其线程释放了锁就会结束此状态。无限期等待(Waiting)等待其它线程显式地唤醒,否则不会被分配 CPU 时间片。进入方法 退出方法 没有设置 Timeout 参数的 Object.w
2021-07-07 01:49:41 83
原创 Java并发原理(一)——并发问题来源
目录为什么需要多线程并发三要素this逃逸为什么需要多线程众所周知,CPU、内存、I/O 设备的速度是有极大差异的,为了合理利用 CPU 的高性能,平衡这三者的速度差异,计算机体系结构、操作系统、编译程序都做出了贡献,主要体现为: CPU 增加了缓存,以均衡与内存的速度差异;// 导致 可见性问题 操作系统增加了进程、线程,以分时复用 CPU,进而均衡 CPU 与 I/O 设备的速度差异;// 导致 原子性问题 编译程序优化指令执行次序,使得缓存能够得到更...
2021-07-07 01:45:33 173
原创 深入理解计算机网络(七)——Cookie与Session
HTTP 是一种不保存状态,即无状态(stateless)协议。也就是说 HTTP 协议自身不对请求和响应之间的通信状态进行保存。那么我们保存用户状态呢?Session 机制的存在就是为了解决这个问题,Session 的主要作用就是通过服务端记录用户的状态。典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。服务端给特定的用户创建特定的 Session 之后就可以标识这个用户并且跟踪这个用户了(一般情况下,服务器会在一定时间内保存这个 Session
2021-07-05 04:23:46 130
原创 深入理解计算机网络(六)——HTTP协议相关问题
目录1.HTTP长连接,短连接长连接和短连接的优点和缺点什么时候用长连接,短连接? 2.HTTP是不保存状态的协议,如何保存用户状态?3.HTTP 和 HTTPS 的区别?HTTP的缺点HTTP+ 加密 + 认证 + 完整性保护=HTTPSHTTPS 的通信步骤1.HTTP长连接,短连接在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含..
2021-07-05 04:16:56 308
原创 深入理解计算机网络(五)——HTTP协议
目录常见方法HTTP报文常见的HTTP状态码各种协议与HTTP协议之间的关系HTTP 协议和 TCP/IP 协议族内的其他众多的协议相同, 用于客户端和服务器之间的通信。请求访问文本或图像等资源的一端称为客户端, 而提供资源响应的一端称为服务器端。常见方法方法 作用 GET 获取资源 POST 传输实体主体 PUT 上传文件 DELETE 删除文件 HEAD 和GET方法类似,但只返回报文首部,不返回报文实体主体部分
2021-07-05 04:08:24 124
原创 深入理解计算机网络(三)——详解TCP如何保证可靠传输
目录1.TCP 协议保证可靠传输的手段:2.具体措施详解1 ARQ协议2 滑动窗口和流量控制3 拥塞控制4 TCP分段与IP分片5 TCP中的四大定时器1.TCP 协议保证可靠传输的手段: 应用数据被分割成 TCP 认为最适合发送的数据块。 TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。 校验和: TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的...
2021-07-03 20:41:54 915
原创 深入理解计算机网络(四)——UDP协议概述
目录UDP协议概述TCP,UDP 协议的区别UDP协议概述UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都会产生一个UDP数据报,并组装成一份待发送的IP数据报,这与面向字节流的协议不同,如TCP,应用程序产生的全体数据与真正发送的单个IP数据报可能没有什么联系(主要是在传输层就进行分段了,因此不会受IP分片的影响)。UDP的首部一共8个字节UDP的校验和至于UDP的校验和,这里注意下区别就好了,UDP对首部和数据部分都进行校验,而IP首部的校验和仅对IP的
2021-07-03 20:33:11 463
原创 深入理解计算机网络(二)——详解TCP三次握手四次挥手
目录2.1 TCP 三次握手漫画图解2.2 为什么要三次握手2.3 第2次握手传回了ACK,为什么还要传回SYN?2.4为什么要四次挥手为了准确无误地把数据送达目标处,TCP协议采用了三次握手策略。2.1 TCP 三次握手漫画图解如下图所示,下面的两个机器人通过3次握手确定了对方能正确接收和发送消息(图片来源:《图解HTTP》)。 简单示意图: 客户端–发送带有 SYN 标志的数据包–一次握手–服务端 服务端–发送带有 SYN/ACK 标志的数据包–二次握.
2021-07-03 20:26:47 498 1
原创 深入理解计算机网络(一)——计网体系结构
目录1.1 应用层1.2 运输层1.3 网络层1.4 数据链路层1.5 物理层1.6 总结一下计算机网络体系结构是指计算机网络层次结构模型,它是各层的协议以及层次之间的端口的集合。在计算机网络中实现通信必须依靠网络通信协议,目前广泛采用的是国际标准化组织(ISO)1997年提出的开放系统互联(Open System Interconnection,OSI)参考模型,习惯上称为ISO/OSI参考模型。TCP/IP(transmission control protocol/in
2021-07-03 20:18:39 732
原创 深入理解JVM—类加载机制
目录类加载概述类的生命周期类加载过程加载准备解析初始化类加载器双亲委派模型自定义加载器Java是一门面向对象的编程语言, Java程序运行过程中无时无刻都有对象被创建出来。 在语言层面上, 创建对象通常(例外: 复制、 反序列化) 仅仅是一个new关键字而已, 而在虚拟机中, 对象(限于普通Java对象,不包括数组和Class对象等)的创建又是怎样一个过程呢?当Java虚拟机遇到一条字节码new指令时, 首先将去检查这个指令的参数是否能在常量池中定位到一个类的
2021-06-29 07:57:45 297
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人