个人成长博客

纸上得来终觉浅,绝知此事要躬行

0%

概述

线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。多个线程访问同一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他操作,调用这个对象的行为都可以获得正确的结果,那么这个对象就是线程安全的。

Java语言中的线程安全

阅读全文 »

Redis离线安装

本文主要是记录一下Redis集群在linux系统下离线的安装步骤,毕竟在生产环境下一般都是无法联网的,Redis的集群的Ruby环境安装过程还是很麻烦的,涉及到很多的依赖的安装,所以写了一个文章来进行记录。

安装Redis

阅读全文 »

概述

进程是资源分配的最小单位,线程是CPU调度的最小单位。进程是抢占处理机的调度单位,线程属于某个进程,共享其资源。多线程是实现并发机制的一种有效手段。进程和线程一样,都是实现并发的一个基本单位。线程是比进程更小的执行单位,线程是进程的基础之上进行进一步的划分。所谓多线程是指一个进程在执行过程中可以产生多个更小的程序单元,这些更小的单元称为线程,这些线程可以同时存在,同时运行,一个进程可能包含多个同时执行的线程。

Java线程

阅读全文 »

概述

G1是 Java 9 的默认垃圾收集器,该收集器可以工作在新生代,也可以工作在老年代。同优秀的CMS垃圾收集器一样,G1也是关注最小时延的垃圾回收器,也同样适合大尺寸堆内存的垃圾收集,整个垃圾收集处理过程并行和并发,并且做到了可预测停顿,官方也推荐使用G1来代替选择CMS。G1最大的特点是引入分区的思路,将整个Java堆内存划分成多个大小相等的Region,弱化了分代的概念,新生代和老年代不再物理隔离,合理利用垃圾收集各个周期的资源,解决了其他收集器甚至CMS的众多缺陷。通过参数-XX:+UseG1GC来启用。

重要概念

阅读全文 »

前言

本来是不想写前言的,后来感觉为了表达更具体些,想想还是写了。2014年对于我来说注定是一个不平凡的一年,这一年刻画着我独特的记忆,承载着我年少时的梦想。或许这份回忆太过平常,这个梦想太过简单,不过这对于我来说,一辈子也就一次,所以我不想把这段时光这段岁月渐渐淡忘,所以我想写下来。我讲述我的故事,你听也好不听也罢。要硬说写给谁看的话,那就是未来的我吧,想想以后满头白发的我看到这篇文章的时候,会不会嘴角上扬,会心一笑。匆匆那年,不悔梦归处,只恨太匆匆。不管以后物是人非也好,背到相驰也罢,留住最美的记忆、最初的感动,无怨无悔。

——写于2015年春节,2020年国庆意外发现

阅读全文 »

CMS垃圾收集器

CMS垃圾回收器的全称是Concurrent Mark-Sweep Collector,从名字上可以看出两点,一个是使用的是并发收集,第二个是使用的收集算法是标记清除算法Mark-Sweep。该收集器的特点是低延迟低停顿,不过因为采用的是标记清除算法所以会产生浮动垃圾的问题。CMS收集器是为了低延迟低停顿而生,通过尽可能的并行执行垃圾回收的几个阶段来把延迟控制到最低。

主要步骤

阅读全文 »

概述

前面介绍了Java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈3个区域随着线程而生,随线程而灭。这几个区域的内存分配和回收都具备确定性,因此在这几个区域中就不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟着回收了。而Java堆和方法区则不一样,一个接口中的多个实现类需要内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,只有在程序处于运行期间时才能知道会创建哪些对象,这部分内存的分配都是动态的,垃圾收集器(Garbage Collection,GC)所关注的时这部分的内存。

总体来说,垃圾收集主要解决三个问题:

阅读全文 »

虚拟机类加载机制

虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。在Java语言里面,类型的加载、连接和初始化过程都是在程序运行时期完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为Java应用程序提供高度的灵活性,Java可以动态扩展的特性就是依赖运行期动态加载和动态连接特性实现。

类加载的过程和时机

阅读全文 »

概述

Java虚拟机简称为JVM,JVM从整体上看,主要解决了以下几个问题:

  1. Java Class 二进制字节流的加载(ClassLoader)
  2. Java 程序的内存管理(GC & 运行时数据区)
  3. Java 程序的执行(执行引擎)
阅读全文 »

Redis底层数据结构设计

Redis是一个分布式缓存中间件,基于C语言写的key-value内存数据库,可以用于做数据缓存、分布式锁、海量数据统计、会话缓存、计数器、分布式队列、延迟队列、分布式ID生成等。Redis是一个键值对数据库,所以介绍Redis得从它的键值对说起,Redis的键只能为字符串对象,Redis的值有五种数据结构,分别是:string(字符串)、list(列表)、hash(字典)、set(集合)和zset(有序集合)。

SDS

阅读全文 »