七种常用排序算法介绍

介绍

排序算法是指将一串乱序数据按照一定规则进行排列的算法;虽然排序是一个很简单的问题,但是对于排序算法的研究已经进行很多年;排序研究至今已经诞生了很多种排序算法了,而最常用常见的排序算法有七种,分别是:选择排序、插入排序、希尔排序、冒泡排序、归并排序、快速排序和堆排序。

很多其他的算法思想都源自基本排序算法,通过学习研究基本的排序算法,能有助于我们理解掌握基本排序算法衍生出来的其他算法。

查看更多

Java并发之ReentrantLock源码分析

Lock介绍

Lock在Java中是一个接口,在这个接口中仅仅定义了6个方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public interface Lock {

void lock();

void lockInterruptibly() throws InterruptedException;

boolean tryLock();

boolean tryLock(long time, TimeUnit unit) throws InterruptedException;

void unlock();

Condition newCondition();
}

查看更多

Java并发之AQS类介绍

AQS类介绍

AQS类全称AbstractQueuedSynchronizer,Java在AQS类中提供了一系列的模板代码,用来实现Java中一系列的同步工具,很多同步工具都是通过内部类继承自AQS类,通过重写AQS类的方法来实现的,如ReentrantLock类、ReentrantReadWriteLock等。

AQS中使用了一个volatile的int类型变量state来表示线程状态,使用Node实现FIFO队列来完成线程的排队执行。

查看更多

Java并发之CAS算法介绍

CAS算法介绍

CAS算法全称为Compare and swap,翻译成中文就是“比较与交换”,是一种有名的无锁算法。无锁编程,就是指在不使用锁的情况下实现多线程之间的变量同步,也就是在没有线程被阻塞的情况下实现变量的同步。

在CAS算法中需要理解3个操作数,内存值V,旧的预期值A,要修改的新值B。

当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做,这就是CAS算法。现代的CPU提供了特殊的指令,可以自动更新共享数据,而且能够检测到其他线程的干扰。

查看更多

Java并发之多线程

写在前面

多线程,是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。在一个程序中,这些独立运行的程序片段叫作“线程”。

查看更多

Java虚拟机之JVM启动参数大全

说明

本文所有的参数是基于JDK7的HotSpot虚拟机,适用于JDK7及以前版本,JDK7后续版本参数是否有效请自测。

对于启用或关闭功能选项:-XX:+<option>打开某功能;-XX:-<option>关闭某功能;

对于数字型选项:-XX:<option>=<number>,若需要表示大小,可在数字后添加k、m、g;

对于字符串选项:-XX:<option>=<string>,用于指定文件,路径或命令列表;

查看更多

Java虚拟机之内存模型与volatile

硬件效率与一致性

尽管现代内存的速度在不断提高,但是内存的速度与cpu比起来还不在一个量级,为了提升计算速度,在内存和处理器之间加上一个高速缓存来作为内存和处理器之间的缓冲。基于高速缓存的方法很好的解决了处理器与内存的矛盾,但是也引入了一个新的问题:缓存一致性。每个处理器都有自己的高速缓存,而他们又共享一个主内存。当处理多个处理器的运算任务都涉及同一个主内存区域时,将可能导致各自的缓存数据不一致,如果真发生这种情况,将同步到主内存的数据到底以谁的缓存数据为准。为了解决一致性问题,需要各个处理器访问缓存时都遵循一些协议。

查看更多

Java虚拟机之类加载器

类加载器介绍

类加载器负责将class文件加载到内存中,并为之生成对应的java.lang.Class对象。对于任意一个类,都需要加载它的类加载器和这个类本身来确定该类在JVM中唯一性,也就是说,同一个class文件用两个不同的类加载器加载并创建两个java.lang.Class对象,即使两个对象来源自同一个class文件,它们也是不相等的,这里“相等”包括Class对象的equals()方法、isAssignableFrom()方法、isInstance()方法,也包括使用instanceof关键字做对象所属关系判定情况。

查看更多

Java虚拟机之类加载机制

概述

Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。

与其他语言不同的是在Java语言里,类的加载、连接和初始化过程都是在程序运行期间完成的,Java里可动态扩展的语言特性就是依赖运行期动态加载和动态连接这个特点实现的。

查看更多