自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 Java虚拟机札记-目录

本目录会随着Java虚拟机札记专栏的更新而更新。JVM虚拟机札记-目录JVM虚拟机札记-概述Java虚拟机札记-Java内存区域划分Java虚拟机札记-垃圾回收与内存分配Java虚拟机札记-Class类文件结构Java虚拟机札记-类加载机制Java虚拟机札记-Java内存模型Java虚拟机札记-线程安全与锁优化

2018-01-17 21:32:54 836 2

原创 Redis札记

Redis介绍什么是ReidsRedis 是一个基于内存的高性能key-value数据结构存储系统。Redis应用数据库、缓存和消息中间件Redis与其他key-value产品相比Redis支持数据的持久化。可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。Redis支持多种数据类型。Redis不仅仅支持简单的key-value类型的数据,同时

2018-01-31 23:37:32 685

原创 Netty札记-为什么要学习Netty

在学习Netty之前,有必要了解下我们为什么要学习Netty。什么是NettyNetty User guide for 4.x中这样介绍 Netty是一个提供异步事件驱动的网络应用框架,是一个用以快速开发高性能、可扩展协议的服务器和客户端的工具。 换句话说,Netty 是一个 NIO 客户端服务器框架,使用它可以快速简单地开发网络应用程序,比如服务器和客户端的协议。Net

2018-01-27 22:48:56 5298 1

原创 Java虚拟机札记-线程安全与锁优化

线程安全什么是线程安全当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的。线程安全级别不可变绝对线程安全相对线程安全线程兼容线程对立不可变 不可变的的数据一定是线程安全的。Java语言中,如果共享数据是基

2018-01-24 08:12:35 438 1

原创 Java虚拟机札记-Java内存模型

什么是Java内存模型Java内存模型(Java Memory Model,JMM),是Java虚拟机规范中的定义,用来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各个平台下都能达到一致的并发效果。Java内存模型目标定义程序中各个变量的访问规则,比如在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量包括实例字段、静态字段和构成数组对象的元素,

2018-01-23 21:43:43 452

原创 Java虚拟机札记-类加载机制

虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、解析、初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。虚拟机如何加载Class文件?Class文件文件进入内存后是如何形成Java类型的?这就是本文要介绍的内容。在Java语言中,类的加载、连接、初始化都是在程序运行期间完成的,而不是在编译期间完成。这种策略虽然会在类加载时增加一些性能开销,但却大大

2018-01-22 22:02:04 1098

原创 Java虚拟机札记-Class类文件结构

众所周知,Java是与平台无关的。字节码是Java虚拟机实现Java语言平台无关性的基石。Class文件是字节码文件。平台无关性程序的运行不会平台的变化而无法运行或出现运行错误,这样的特性就称为平台无关性。 程序需要在由OS和CPU所构成的平台上运行。每个平台都有自己独特的机器指令,所谓平台的机器指令就是可以被该平台直接识别、执行的一种由0和1组成的序列代码。相同的CPU和不同的OS所

2018-01-21 21:38:19 943

原创 Java虚拟机札记-垃圾回收与内存分配

目前内存分配和垃圾回收已经实现了“自动化”,为什么我们还要关注它们呢?当排查各种内存溢出、内存泄露问题时,当垃圾回收成为提高系统并发量的瓶颈时,有必要对内存的动态分配和垃圾回收进行监控和调节。GC需要考虑三个问题:哪些内存需要回收?什么时候回收?如何回收?哪些内存需要回收?在Java虚拟机札记-Java内存区域划分一文中,我们已经学习了Java运行时内存区域的各个部分。其中,程序计数器...

2018-01-19 22:56:33 1351 1

原创 Java虚拟机札记-Java内存区域划分

众所周知,Java程序员不需要为对象手动分配和释放内存。这要归功于虚拟机。但凡事有利就有弊,一旦出现内存溢出或泄露方面的问题,程序员如果不了解虚拟机是如何管理内存的,排查问题不是件容易的事情。本文将介绍Java虚拟机管理的各个内存区域,为以后学习虚拟机是如何管理内存打好基础。运行时数据区域根据《Java虚拟机规范》,Java虚拟机管理的内存可以分为以下几个运行时数据区域。程序计数...

2018-01-18 22:05:47 1060

原创 Java虚拟机札记-概述

今天开始学习Java虚拟机。本文介绍Java虚拟机的基础知识。JDK与JRE 在学习Java虚拟机之前,我们先来复习下JRE和JDK的定义。JRE,Java Runtime Environment,意为Java运行时环境,包含Java虚拟机和Java API类库。JDK,ava Development Kit ,意为Java开发工具包,包含JRE和Java工具(如编译Java程序的Javac

2018-01-17 22:33:50 1092

原创 Java并发编程札记-总结

一基础01基本概念并发什么是并发并发的优点多线程线程并发与并行线程和进程02创建线程创建线程的方式Thread和Runnable该如何选择run方法与start方法的区别03线程的生命周期线程的生命周期图线程的状态04Thread详解线程等待与唤醒waitnotifynotifyAll线程让步yield线程休眠sleep线程启动start中

2018-01-11 21:42:07 1159 3

原创 Java并发编程札记-(七)JUC工具类-01概述

今天学习JUC中的工具类。CountDownLatch CountDownLatch是一个通用同步器,用于同步一个或多个任务。在完成一组正在其他线程中执行的任务之前,它允许一个或多个线程一直等待。CyclicBarrier CyclicBarrier允许一组线程互相等待,直到到达某个公共屏障点。如果你希望一组并行的任务在下个步骤之前相互等待,直到所有的任务都完成了下个步骤前的所有操

2018-01-07 23:06:07 587

原创 Java并发编程札记-(六)JUC线程池-05ExecutorCompletionService

CompletionService接口是将生产新的异步任务与使用已完成任务的结果分离开来的服务。生产者利用submit()提交要执行的任务。使用者利用take()获取并移除已完成的任务的返回值,并按照完成这些任务的顺序处理它们的结果。通常,CompletionService 依赖于一个单独的 Executor 来实际执行任务,在这种情况下,CompletionService 只管理一个内部完成

2018-01-07 21:09:30 473

转载 Java线程池架构2-多线程调度器(ScheduledThreadPoolExecutor)

在前面介绍了java的多线程的基本原理信息:《Java线程池架构原理和源码解析(ThreadPoolExecutor)》,本文对这个java本身的线程池的调度器做一个简单扩展,如果还没读过上一篇文章,建议读一下,因为这是调度器的核心组件部分。我们如果要用java默认的线程池来做调度器,一种选择就是Timer和TimerTask的结合,在以前的文章:《Timer与TimerTask的真正原理&使

2018-01-07 20:10:06 786

转载 聊聊并发(八)——Fork/Join框架介绍

本文首发于InfoQ1. 什么是Fork/Join框架Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务

2018-01-06 22:24:43 740

原创 Java并发编程札记-(六)JUC线程池-02ThreadPoolExecutor实现原理

本文通过学习ThreadPoolExecutor源码来学习线程池的实现原理。简介为什么要使用线程池 许多服务器都面临着处理大量客户端远程请求的压力,如果每收到一个请求,就创建一个线程来处理,表面看是没有问题的,但实际上存在着很严重的缺陷。服务器应用程序中经常出现的情况是请求处理的任务很简单但客户端的数目却是庞大的,这种情况下如果还是每收到一个请求就创建一个线程来处理它,服务器在创建和...

2018-01-05 22:02:59 717

原创 Java并发编程札记-(六)JUC线程池-01概述

前面的例子中总是需要线程时就创建,不需要就销毁它。但频繁创建和销毁线程是很耗资源的,在并发量较高的情况下频繁创建和销毁线程会降低系统的效率。线程池可以通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 参考JDK1.8中的相关类,画出下图。 (此图不是十分准确,有些类实现了两个接口,这里只展示出了一个) 本章只是简单地介绍下它们,在以后的文章中会选一些最重要的来学习。Execut

2018-01-04 21:15:41 1860

原创 Java并发编程札记-(五)JUC容器-07ConcurrentLinkedQueue

ConcurrentLinkedQueue是一个基于链表的、无界的、线程安全的队列。此队列按照FIFO原则对元素进行排序。此队列不允许使用null元素。此队列采用了有效的“无等待(wait-free)”算法(CAS算法)。需要小心的是,与大多数collection不同,size方法不是一个固定时间操作。由于这些队列的异步特性,确定当前元素的数量需要遍历这些元素。ConcurrentLink

2018-01-03 21:25:02 722

原创 Java并发编程札记-(五)JUC容器-06LinkedBlockingDeque

LinkedBlockingDeque是一个基于链表的、可指定大小的阻塞双端队列。“双端队列”意味着可以同时从队列的头尾两端同时操作,所以LinkedBlockingDeque既支持FIFO,也支持FILO。可选的容量范围构造方法参数是一种防止过度膨胀的方式。如果未指定容量,那么容量将等于 Integer.MAX_VALUE。只要插入元素不会使双端队列超出容量,每次插入后都将动态地创建链接节点

2018-01-02 16:09:11 468

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除