Fork me on GitHub
0%

对于 MySQL 的认识,我们大部分人可能都还只是停留在增删改查的阶段,当然我们接触的更多的也就是页面上输入一些信息,调用后台接口保存到数据库,然后再从数据库查询得到值后返回给前端展示在页面上,这也就是业界俗称的 CRUD 工程师。怎么说呢,如果我们日常只能接触到这些 CRUD 的需求,那就算是 CRUD,我们也要努力将 CRUD 做到极致。

Read more »

之前我们简单提到了 JVM 中的垃圾收集算法,比较常见的包含有标记-清除算法,标记-复制算法,标记-整理算法,那么针对这些算法的各种具体实现也就有了 JVM 中使用的各种垃圾收集器,对于这些垃圾收集器,简单一点可以直接按照新生代和老年代来进行划分,针对新生代中使用的垃圾收集器有: Serial,Parallel New,Parallel Scavenge,针对老年代中使用的收集器有:Serial Old,Parallel Old,CMS(Concurrent Mark Sweep)。正是因为没有一款收集器能够适用于所有场景,所以才有了各种场景下的收集器出现。

Read more »

在《Java 中对象和数组的创建》一文中我们主要介绍了在 Java 虚拟机中创建一个对象的完整过程,而我们的程序在运行时可能无时无刻不在创建对象,每创建一个对象就需要在堆中进行内存分配,可是堆内存大小毕竟是有限的,总会有用完的时候,那如果用完了该怎么办呢?

Read more »

在《Java 中对象和数组的创建》一文中提到了很多 JVM 的理论知识,而且里面可能还有很多关联的 JVM 知识点没有介绍到,所以可能初次看起来都比较抽象,但是没关系,先硬着头皮坚持看下去,对这些东西有个初步的印象,等到后面关联的这些知识点都提到了之后你再回过头来看可能就会有种打通任督二脉的感觉了。这里为了加深一下这些理论知识的印象,下面就来看下上一篇文章中提到的有关理论知识的简单实践和验证。

Read more »

在上篇文章中,主要介绍了 JVM 的运行时数据区域分布情况,包括堆,程序计数器,栈,方法区,运行时常量池,直接内存等,接下来我们就先来看下和堆区相关的知识点,之前说过堆区是提供所有的类实例以及数组进行内存分配的地方,那实例和数组又是怎么创建的呢?我们一起来看下吧。

Read more »

说到 Java 虚拟机(Java Virtual Machine, 简称 JVM),可能对于我们大部分 Java 程序员来说都感觉望而生畏,都觉得它很高大上,毕竟我们都知道因为它我们的 Java 程序才能做到一次编写,到处运行,而且因为它我们才能够做到只专注于业务代码实现,而不用去关心内存分配和回收的事情,仅从这两点就能看出 Java 虚拟机为我们做了多少事情,但也正因为它为我们做的事情太多了,以至于我们只需要一心一意的去实现我们的需求,在大多数情况下我们都不用去关心底层如何做到的,但也因为它做了太多,导致我们在编码过程中遇到一些问题时根本不知道发生了什么,更别提如何解决了,因此我们还是有必要去了解一下 Java 虚拟机到底是怎么为我们服务的,这样在遇到问题时才不至于手足无措。

Read more »

在上篇文章中大概介绍了 Java 中细粒度锁的几种实现方式,并且针对每种方式都做了优缺点说明,在使用的时候就需要根据业务需求选择更合适的一种。上篇文章中的最后一种弱引用锁的实现方式,我在里面也说了其实还有更优雅的实现,其实也算不上更优雅,只是看起来更优雅,原理还是一样的,今天我打算用一篇文章的篇幅来好好说下。

Read more »

上篇文章大致说了下 ReentrantLock 类的使用,对 ReentrantLock 类有了初步的认识之后让我们一起来看下基于 ReentrantLock 的几种细粒度锁实现。

Read more »

v本来这篇文章打算写下细粒度锁的几种通用实现的,但在实践的过程中,我觉得有必要先介绍一下 ReentrantLock 这个类,可能大部分人都没有使用过,其实我也是一样,在接触到这个类之前都是只用过 synchronized 关键字,直到接触到了 ReentrantLock 这个类才知道还有这个东西,哎,还是对并发编程不是非常熟悉,对 JUC 并发包还需要进一步的去学习,下面我们就一起来看下 ReentrantLock 这个类是怎样的。

Read more »

在 Java 里面我们可能会遇到由于资源共享导致线程安全的问题,经常性的就是多个线程同一时间对共享的资源数据进行修改,这时可能就会出现数据不是我们预期的情况。

拿一个通俗点的例子来说的话就是多个线程对同一个账户进行扣款操作,比如说下面的例子:

Read more »