自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JVM虚拟机-JVM垃圾收集器有哪些

一. 常见的垃圾回收器新生代收集器SerialParNewParallel Scavenge老年代收集器Sseial OldCMSParallel Old堆内存垃圾收集器G1下图之间的连线,表示他们直接可以搭配使用二. 新生代垃圾回收器Serial收集器Serial是一款用于新生代的单线程收集器,采用复制算法进行垃圾收集。Serial进行垃圾收集时,不仅只...

2020-02-18 22:42:26 199 1

原创 SpringBoot 2.0中freemarker里的shiroTargets标签库

guest标签:验证当前用户是否为“访客”,即未认证(包含未记住)的用户;shiro标签:< shiro:guest></shiro:guest> ;freemark中: <@shiro.guest> </ @shiro.guest>user标签:认证通过或已记住的用户 shiro标签:< shiro:user> </sh...

2019-09-20 18:06:04 282 1

原创 Vue.js学习笔记——Vue实例生命周期

<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title></title> <script src="vue.js" type="text/javascript" charset="UTF-8"></script> <...

2019-09-19 16:14:51 161

原创 JVM虚拟机-JVM垃圾回收

什么是垃圾回收垃圾回收就是释放立即占用的空间,防止内存泄漏。有效的使用可以使用的内存,对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收。怎么定义垃圾引用计数算法引用计数算法是通过在对象头中分配一个空间来保存该对象被引用的次数。如果该对象被其他对象引用,则它的引用计数加1,如果删除对该对象的引用,那么它的引用计数就减1.当该对象的引用计数为0时,那么该对想就会被回收。String...

2019-08-20 01:23:54 412

转载 SpringBoot的启动原理

springboot之启动原理解析及源码阅读

2019-08-20 00:35:59 96

原创 《Java并发编程的艺术》第九章读书笔记——Java中的线程池

在开发过程中,合理地使用线程池能够带来3个好处:降低资源消耗提高响应速度提高线程的可管理性9.1 线程池的实现原理从图中可以看到当提交一个新的任务到线程池时,线程池的处理流程:线程池判断核心线程池里的线程是否都在执行任务,如果没有,则创建新的线程来执行任务,如果核心线程都满了,则进入下一步。线程池判断当前工作队列是否都满了,如果没有满,则将新提交的任务存储在队列中。如果满了,...

2019-08-19 23:23:48 143

原创 《Java并发编程的艺术》第三章读书笔记——3.7 happens-before

3.7.1 JMM设计设计意图程序员对内存模型的使用编译器和处理器对内存模型的实现从图中可以看到:JMM向程序员提供的happens-before规则能满足程序员的需求JMM对编译器和处理器的束缚已经尽可能少。3.7.2 happens-before的定义《JSR-133:Java Memory MOdel and Thread Specification》对happen...

2019-08-19 18:14:14 145

原创 《Java并发编程的艺术》第三章读书笔记——3.6 final域的内存语义

3.6.1 final域的重排序规则对于final域,编译器和处理器要遵守两个重排序规则:在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之前不能重排序。public clas FinalExample{ int i ; ...

2019-08-19 11:49:17 114

原创 《Java并发编程的艺术》第三章读书笔记——3..5 锁的内存语义

3.5.1 锁的释放–获取建立的happens-before关系锁是java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。3.5.2 锁的释放后和获取的内存语义当线程释放锁时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存中。当线程获取锁时,JMM会把该线程对应的本地内存置为无效。总结:锁释放与volatile写有相同的语...

2019-08-19 11:02:32 90

原创 JVM虚拟机-JVM内存如何划分的

区域划分根据《Java虚拟机规范》JVM会把它管理的内存划分为若干个不同的数据区域,如下图所示:方法区、堆、栈(虚拟机栈、本地方法栈)、程序计数器。线程私有的意思是指,JVM每遇到一个新的线程就会为他们分配栈和程序计数器。PS:(1)非线程共享区域的生命周期与所属线程相同,而线程共享区域与JAVA程序运行生命周期相同,GC只发生在线程共享的区域。(2)程序计数器无内存溢出异常,其他四个区...

2019-08-07 18:02:42 209

原创 《Java并发编程的艺术》第三章读书笔记——3.4 volatile的内存语义

3.4 volatile的内存语义3.4.1 volatile的特性class VolatileFeaturesExample { volatile long v1 = 0L; //使用volatile声明64位的long型变量 public void set(long l) { v1 = l; ...

2019-08-01 18:04:59 126

原创 《Java并发编程的艺术》第三章读书笔记——3.3顺序一致性

3.3顺序一致性顺序一致性内存模型是一个理论参考模型,在设计的时候,处理器的内存模型和编程语言的内存模型都会以顺序一致性内存模型作为参照。3.3.1 数据竞争与顺序一致性JMM对正确同步的多线程程序的内存一致性做了如下保证:如果程序是正确同步的,程序的执行将具有顺序一致性 ——即程序的执行结果与该程序的顺序一致性内存模型中的执行结果相同。3.2.2 顺序一致性内存模型顺序一致性内存模型...

2019-07-28 23:09:26 237

原创 《Java并发编程的艺术》第三章读书笔记——3.2 重排序

3.2重排序重排序是指编译器和处理器为了优化性能而对指令序列进行重排序的一种手段。3.2.1数据依赖性如果两个操作访问同一个变量,且这两个操作有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖性分为3种:写后读写后写读后写编译器和处理器在重排序时,会遵守数据依赖性,这里所说的数据依赖性仅针对单个处理器中执行的指令序列和单个线程中执行的操作。3.2.2 as-if-se...

2019-07-28 14:23:27 137

原创 《Java并发编程的艺术》第三章读书笔记——3.1 JAVA内存模型的基础

3.1.1 - 3.1.2 Java并发基础与内存模型在并发编程中,需要处理两个问题:线程之间如何通信及线程之间如何同步。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。JAVA的并发采用的是共享内存模型,JAVA线程之间的通信是总是隐式进行。JAVA线程之间的通信由JAVA内存模型控制(JMM),JMM决定一个线程对共享变量的写入何时对另...

2019-07-28 12:50:04 142

原创 《Java并发编程的艺术》第二章读书笔记

2.1volatile应用在多线程并发编程中synchronized和volatile都扮演着重要的角色,volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另一个线程能读到这个修改的值。如果volatile变量修饰使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切...

2019-07-26 15:23:08 169

原创 SpringIoc解析

一、什么是IoCIoC,Inversion of Control,控制反转。控制反转是一种通过描述(在java中可以使XML或者注解)并通过第三方去获取特定对象的方式。简单地说就是将对象由虚拟机主动创建变为从IoC容器中获取,它是面向对象编程的一种思想,主要作用是降低开发难度、对模块解耦、有利于测试,常见实现方式是依赖注入(DI)和依赖查找(DL)。我们举例说明...

2019-07-03 17:04:38 103

原创 内部类用法

Java内部类共分为四种 静态内部类static inner class (also called nested class) 成员内部类member inner class 局部内部类local inner class 匿名内部类anonymous inner class1·静态内部类Static Inner Class最简单的内部类形式。  类定义时加上stat...

2019-06-13 14:27:36 131

原创 MyBatis核心组件以及运行原理

概要想要全面深入的理解mybatis框架,首要前提是学习它的核心组件,我们先来看看MyBatis的“表面现象”——mybatis的核心组件包括:SqlSessionFactoryBuilder(构造器)、SqlSessionFactory(工厂接口)、SqlSession(会话接口)、SQL Mapper(映射器)。通过一张图来整体展示四个核心组件的关系:构建SqlSessionFactor...

2019-05-31 18:27:08 2384

转载 深入研究 Java Synchronize 和 Lock 的区别与用法

在分布式开发中,锁是线程控制的重要途径。Java为此也提供了2种锁机制,synchronized和lock。做为Java爱好者,自然少不了对比一下这2种机制,也能从中学到些分布式开发需要注意的地方。我们先从最简单的入手,逐步分析这2种的区别。一、synchronized和lock的用法区别synchronized:在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加...

2019-04-23 14:25:01 122

原创 多线程——Lock的使用

Lock介绍:lock关键字可确保当一个线程位于代码的临界区时,另一个线程不会进入该临界区。如果其他线程尝试进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。Lock是一个接口,其中常用的方法有:尝试获取锁,获取成功则返回,否则阻塞当前线程void lock();尝试获取锁,线程在成功获取锁之前被中断,则放弃获取锁,抛出异常 void lockInterruptib...

2019-04-12 11:27:43 2534

原创 多线程——synchronize的用法

synchronized介绍因为在开发中会遇到“线程安全”与“非线程安全”相关的技术点,“非线程安全”其实会在对多个线程对同一个对象的实例变量进行并发访问时发生,产生的结果就是“脏读”,也就是取到的数据其实是被更改过的。而“线程安全”就是以获得的实例变量的值是经过同步处理的,不会出现“脏读”的现象。 因此为了解决“非线程安全”的问题就需要使用锁,也就是synchronized,synchroni...

2019-04-11 17:13:59 1037

原创 多线程——Condition的介绍以及用法

之前总结了wait和notify的用法,今天总结一下condition的用法。Condition介绍:关键字synchronize可以与wait()和nitify()方法相结合实现实现等待/通知模式,类ReentrantLock也可以实现同样的功能,但需要借助condition对象。condition类是在JDK5中出现的技术,使用他有更好的灵活性,比如可以实现多路通知功能,也就是在一个Loc...

2019-04-10 16:29:48 5466

原创 多线程——多线程状态以及wait(), notify(), notifyAll()等方法介绍

Java线程的基本状态:说明:线程共包括以下5种状态。新建状态(New) : 线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。就绪状态(Runnable): 也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。例如,thread.start()。处于就绪状态的线程,随时...

2019-04-09 15:33:07 950

原创 多线程——使用多线程

最近把《Java多线程编程核心技术》一书看了一遍,为了让自己更好的理解,写博客记录一下自己得感悟。Java 提供了三种创建线程的方法:通过实现 Runnable 接口;通过继承 Thread 类本身;通过 Callable 和 Future 创建线程Thread 方法序号详解1public void start() : 使该线程开始执行;Java 虚拟机调用该...

2019-04-08 16:20:10 272

原创 Java类的加载过程和顺序

首先,我们得理解 类什么时候加载,和 类什么时候初始化。类什么时候加载类的加载是通过类加载器(Classloader)完成的,它既可以是饿汉式[eagerly load](只要有其它类引用了它就加载)加载类,也可以是懒加载 [lazy load](等到类初始化发生的时候才加载)。不过我相信这跟不同的JVM实现有关。然而他又是受JLS保证的(当有静态初始化需求的时候才被加载)。...

2019-03-15 13:10:12 216

空空如也

空空如也

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

TA关注的人

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