- 博客(145)
- 资源 (5)
- 收藏
- 关注
原创 Jenkins01 安装
******************Jenkins环境搭建******************1.安装git yum install git -y iptables -F 清除防火墙 useradd git 创建git用户 passwd git 修改git密码 su - git 进入git用户 mkdir repos 创建git仓库目录 mkdir app.git 创建具体项目的git...
2021-07-26 22:36:42 208
原创 Java并发25 ThreadFactory使用的必要性
ThreadFactory使用的必要性1.阿里编码规约扫描插件的友善提醒2.ThreadFactory的使用1.阿里编码规约扫描插件的友善提醒当我们构建一个线程池时,如果使用了阿里的编码规范扫描插件的话,会提醒我们要使用带ThreadFactory参数的ThreadPoolExecutor构造方法,Ctrl+F1进去我们会看到:之前的文章已经介绍了线程池中ThreadFactory用于设置...
2019-04-19 23:40:42 7374
原创 Java并发24 再来一个例子来看看线程池执行过程
线程池执行过程一 直接上例子二 饱和策略一 直接上例子public class ThreadPoolExecutorTest { private static ThreadPoolExecutor pool = new ThreadPoolExecutor(2, 4, 60, TimeUnit.SECONDS, new ArrayBlockingQueue&l...
2019-03-24 00:31:27 384
原创 Java并发23 线程池的使用
线程池的使用补:上篇文章中线程池中的全局锁问题使用线程池的目的线程池ThreadPoolExecutor详细介绍ThreadPoolExecutor简单使用补:上篇文章中线程池中的全局锁问题在上篇文章中,提到线程池在创建线程的时候需要获取全局锁,这里我们就看看源码,查看addWorker()方法private boolean addWorker(Runnable firstTask, boo...
2019-03-20 00:42:43 522
原创 Java并发22 线程池原理
线程池原理1.线程池处理流程2.execute()方法1.线程池处理流程当线程池提交一个新的任务时,线程池的处理流程如下:线程池判断核心线程池corePoolSize是否已满(是否都在执行任务),未满则创建线程执行任务;已满则下一步线程池判断工作队列BlockingQueue是否已满,未满则将任务放进队列;已满则下一步线程池判断池中线程数是否达到maximumPoolSize(所有线程...
2019-03-18 23:53:21 589
原创 Java并发21 Executor简介
一 两级调度模型 在JVM的线程模型中,Java线程被一对一的映射为本地操作系统线程,Java线程启动会创建一个本地操作系统线程;当该Java线程终止时,这时操作系统线程也会被回收。操作系统会调度所有线程并将它们分配给可用的CPU。 在上层,Java多线程程序通常把应用分解为若干个任务,然后使用用户级的调度器(Executor)将这些任务映射为固定数量的线程;在底层,...
2019-03-05 23:59:20 251
转载 SpringBoot使用通用Mapper
项目启动类:@SpringBootApplication@MapperScan(basePackages = {"yiche.com.mapper"})/*@MapperScan仅扫描业务接口包,不能扫描本地通用Mapper接口包, 否则报java.lang.ClassCastException: sun.reflect.generics.reflectiveObjects.Type...
2018-11-30 23:56:28 498
原创 Linux下安装Redis
Redis介绍: Redis 是一种非关系型数据库(NoSQL),NoSQL 以 Key-Value 形式存储,与传统关系型数据库不一样,不一定遵循传统数据库的基本要求,比如说 SQL 标准、ACID 属性、表结构等等。非关系型、分布式、开源、水平可扩展,是这类数据库的主要特点。NoSQL 使用场景主要有对数据高并发读写、对海量数据的高效率存储和访问、对数据的高可扩展性和高可...
2018-10-31 23:09:52 262
原创 JVM--18 【垃圾回收算法】标记-整理算法和分代收集算法
前言: 复制收集算法在对象存活率较高时就要进行大量的复制操作,效率将会变低。更关键的是,如果不想浪费50%的空间,就需要额外的空间进行分配担保,以应对被使用的内存中所有对象都100%存活的极端情况,所以在老年代一般不能直接选用复制算法。 标记-整理算法 根据老年代的特点,有人提出了另外一种“标记-整理”算法,其实这里的标记-整理就是在标记-...
2018-09-24 23:43:22 429
原创 JVM--17 【垃圾回收算法】复制算法
前言:上一篇博文,我们介绍了标记-清除算法,其中关于此算法的两个不足之处:效率问题和空间问题 做了特别说明。本篇介绍复制算法就是在标记-清除算法的基础上进行改进。特别是标记-清除算法可能造成内存空间不连续问题进行改进。 复制算法 在介绍复制算法之前,我们细化一下JVM内存结构。在此之前我们将内存结构分为线程共享区域(方法区、堆)和线程独享区(...
2018-09-24 13:23:59 744
原创 JVM--16 【垃圾回收算法】标记-清除算法
标记-清除算法 首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象,它是最基础的收集算法,是因为后续的收集算法都是基于这种思路并对其不足进行进行改进而得到的。不足之处 效率问题:标记和清除两个过程的效率都不高 空间问题:标志清除之后会产生大量的不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对...
2018-09-22 21:44:48 507 1
原创 JVM--15 【垃圾回收机制】如何判断对象是垃圾对象
上一篇博文,我们讲了判断对象是垃圾对象的方法之一:引用计数算法,这里我们继续看第二种方法:可达性分析算法。一、可达性分析算法 可达性分析算法:基本思路就是通过一系列成为“GC Roots”的对象作为起点,从这些节点开始向下搜索,搜索所走过的路径称为“引用链”(Reference Chain)。当一个对象到GC Roots没有任何引用链相连...
2018-09-22 13:45:15 427
原创 JVM--14 【垃圾回收机制】 如何判断对象是垃圾对象
一、对象已经死了吗? 在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是确定这些对象之中哪些是“存活”着,哪些已经“死去”(即不可能再被任何途径使用的对象)判断对象是否存活的算法:引用计数法、可达性分析算法。这里分两篇博文介绍一下这两种算法,本篇先介绍一下:引用计数算法二、引用计数算法 引用计数...
2018-09-22 12:21:51 647
转载 JVM--13 垃圾回收概述
摘抄自小涛涛~~~:小涛涛JVM系列博客 众所周知,java语言不需要像c++那样需要自己申请内存,自己释放内存,这些都是JVM帮我们做好了的,但是对于一名java程序员,想要更近自己的水平更上一层楼,就要去了解GC的工作原理,根据原理才能写出更好的更优的程序。 &...
2018-09-22 08:36:13 323
转载 JVM--12 对象的访问定位
摘抄自小涛涛~~~:小涛涛JVM系列博客 之前我们理解java栈堆时可能会说栈中存储指针,指向堆中的对象地址。其实这种说法是不严谨的,其一是java中没有指针的概念,其二是栈中不一定存储对象的地址,也可能是其他地址。那么问题来了,对象是如何进行访问定位的呢。 &nbs...
2018-09-20 22:52:37 197
转载 JVM--11探究对象结构
摘抄自小涛涛~~~:小涛涛JVM系列博客 在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。下图是普通对象实例与数组对象实例的数据结构:对象头HotSpot虚拟机的...
2018-09-18 23:58:29 199
转载 JVM--10 对象的创建
摘抄自小涛涛~~~:小涛涛JVM系列博客 下图是JAVA虚拟机对象的创建过程:现在我们就以下几点说明对象的创建:1、给对象分配内存给对象分配内存有指针碰撞和空闲列表两种方式。具体描述如下图所示。按时2、线程安全性问题 无论是指针碰撞还是空闲列表,在高并发情况下都有可能存在线程安全...
2018-09-18 00:13:11 256
转载 JVM--09 运行时常量池和直接内存
摘抄自小涛涛~~~:小涛涛JVM系列博客 1、运行时常量池 运行时常量池(Runtime Constant Pool),它是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述等信息外,还有一项信息是常量池(Constant Pool Table),用于存放编译...
2018-09-18 00:10:37 408
转载 JVM--08 JVM方法区
摘抄自小涛涛~~~:小涛涛JVM系列博客 1、JAVA虚拟机方法区 JAVA虚拟机方法区在JAVA虚拟机内存模型中位置如下图所示。 方法区和堆一样,是各个线程共享的内存区域,用于存储已被虚拟机加载
2018-09-12 00:25:45 435
转载 JVM--07 Java虚拟机栈
摘抄自小涛涛~~~:小涛涛JVM系列博客 1、JAVA虚拟机栈概述 JAVA虚拟机栈在JAVA虚拟机内存模型中位置如下图所示。 JAVA虚拟机栈是描述JAVA方法执行的动态内存模型。从上图可以看出
2018-09-05 00:29:28 343
转载 JVM--06 程序计数器
摘抄自小涛涛~~~:小涛涛JVM系列博客 程序计数器具有如下特点:如果线程正在执行的是Java 方法,则这个计数器记录的是正在执行的虚拟机字节码指令地址如果正在执行的是Native 方法,则这个技术器值为空(Undefined)此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域 ...
2018-09-05 00:26:04 202
转载 JVM--05 Java内存区域介绍
摘抄自小涛涛~~~:小涛涛JVM系列博客 JAVA虚拟机内存模型如下图所示: 上图我们可以看到JAVA虚拟机内存模型分为两大块:线程共享区和线程独占区域。 线程共享区:方法区和堆是分配给进程的,也就是所有线程共享的。...
2018-09-03 22:55:43 205
转载 JVM--04 Java虚拟机发展
摘抄自小涛涛~~~:小涛涛JVM系列博客 下面,我们对上述JAVA虚拟机产品进行逐一介绍:1、Sun Classic VM 世界上第一款商用虚拟机,只能使用纯
2018-08-30 23:16:17 228
转载 JVM--03 Java发展史
摘抄自小涛涛~~~:小涛涛JVM系列博客 一、JDK Version 1.0 开发代号为Oak(橡树),于1996-01-23发行 其提出了“Write Once,Run Anywhere”的口号二、JDK Version 1.1于1997-02-19发行。引入的新特性包括:引入JDBC(Java D...
2018-08-30 22:38:27 183
原创 Junit单元测试 加载两种路径的Spring配置文件applicatonContext.xml
前言:今天工作中遇到一个问题,J2EE项目使用Spring,Spring配置文件applicationContext.xml放在和类路径平级的一个conf目录下,在使用Junit进行单元测试的时候,无法通过注解@ContextConfiguration加载applicationContext.xml配置文件,这里整理出配置文件的两种路径的加载:一、类路径下的配置文件加载(src...
2018-08-30 21:58:21 3804 1
原创 Java中创建对象的五种方式
前言:我们知道,一个对象在可以被使用之前必须要被正确的实例化,在Java代码中,有很多行为可以引起创建对象,最为直观的一种就是使用new关键字来调用一个类的构造函数显示地创建对象。这种方式在Java规范中被称为:由执行类实例创建表达式引起的对象创建。除此之外,我们还可以使用反射机制(Class类的newInstance方法、使用Constructor类的newInstance方法...
2018-08-08 22:33:28 1234
原创 SpringBoot使用Junit测试 防止事物自动回滚
问题:我在测试类中的save方法测试成功通过,但数据库没有插入数据测试方法如下:@Test @Transactional// @Rollback(false) public void saveOne(){ ProductCategory productCategory = new ProductCategory(); ...
2018-08-05 00:56:06 7520 2
原创 SpringBoot01-- 默认Jackson和fastJson的Json转化器对null处理对比
前言:在实际项目中,我们难免会遇到一些 null 值的出现,我们转 JSON 时,不希望这些 null 出现,比如我们期望所有的 null 在转 JSON 时都变成 "" 这种空字符串 我们这里使用默认Jackson和fastJson的Json转化器对null处理做一个对比1.默认Jackson的JSON转化器对null的处理写一个JacksonConfig配置类pac...
2018-07-29 23:04:18 4767
原创 JVM--03 JVM可视化监控工具---JConsole
摘抄自小涛涛~:小涛涛~一 、找到JConsole启动exe 前往JDK安装目录,在其bin目录下寻找jconsole.exe文件。 jconsole.exe只是一个快捷方式的包装,其实际实现代码在tools.jar中实现。二、打开JConsole 因为我们已经将JDK的bin目录配置到了系统变量中,因此我们可以直接打开cmd窗口,输入jconso...
2018-07-05 00:07:43 324
原创 JVM--02 模拟内存溢出 内存监控方法
摘抄自小涛涛~~~:小涛涛JVM系列博客一 模拟内存溢出: 1 代码如下: 2 IDEA配置JVM参数 配置内容:-XX:+HeapDumpOnOutOfMemoryError -Xms20m -Xmx20m 其中-XX:+HeapDumpOnOutOfMemoryError指的是在堆溢出时保存快照 其中-Xms20m -Xmx20m是设置JVM最大和最小堆内存都为20m。配置这里是因为...
2018-07-03 23:36:59 770
原创 JVM -- 01Java平台简述
前言:一次面试引发的“血案” 前不久面试,面试官开门见山,来了一句:“说说你对Java平台的看法或者理解?” 我:瞬间懵逼!。。。我还想说Java他老人家对我有没有看法呢!言归真正,这次面试给我很好的提了个醒。做开发两年确实菜鸟一枚,很多基础的东西自己一直抱着得过且过的心态,是应该静下心好好梳理夯实一下基础的东西了。那么就先从JVM开始弄起!~~~1.浅谈Java平台Java组成: ...
2018-07-03 22:18:30 391
原创 SpringAOP的实现原理
简介 前段时间写的java设计模式–代理模式,最近在看Spring Aop的时候,觉得于代理模式应该有密切的联系,于是决定了解下Spring Aop的实现原理。 说起AOP就不得不说下OOP了,OOP中引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。但是,如果我们需要为部分对象引入公共部分的时候,OOP就会引入大量重复的代码。例如:日志功能。 AOP...
2018-06-03 02:44:32 463
转载 深入剖析动态代理--性能比较
原文:http://blog.csdn.net/liutengteng130/article/details/46565309动态代理是指在运行时,动态生成代理类。代理类的字节码将在运行时生成并载入当前的ClassLoader.  ...
2018-05-31 00:26:26 391
转载 毕业三到五年,别让“努力”毁了你
毕业,就像一个大大的句号,从此,我们告别了一段纯真的青春、一段年少轻狂的岁月、一个充满幻想的时代,纷纷走向了社会。 刚毕业的时候,作为职场新人,我们都拿着接近的薪水,干着相似的事情,大家都过得差不多。 然而三到五年过去...
2018-05-30 23:08:35 229
转载 Java并发20--线程同步工具Exchanger的使用
如果两个线程在运行过程中需要交换彼此的信息,比如一个数据或者使用的空间,就需要用到Exchanger这个类,Exchanger为线程交换信息提供了非常方便的途径,它可以作为两个线程交换对象的同步点,只有当每个线程都在进入 exchange ()方法并给出对象时,才能接受其他线程返回时给出的对象。 每次只能两个...
2018-05-23 00:20:48 272
转载 Java并发19--并发工具CyclicBarrier的使用
上一节中总结了Semaphore同步工具的使用,Semaphore主要提供了一个记数信号量,允许最大线程数运行。CyclicBarrier是另一个同步工具,这一节主要来总结一下CyclicBarrier的使用。先看一下官方的对CyclicBarrier的介绍: 一个同步辅助类,它允许一组线程互相等待,直到到...
2018-05-22 10:37:37 229
转载 Java并发18--线程同步工具Semaphore的使用
Semaphore通常用于限制可以访问某些资源(物理或逻辑的)的线程数目,我们可以自己设定最大访问量。它有两个很常用的方法是acquire()和release(),分别是获得许可和释放许可。 官方JDK上面对Semaphore的解释是这样子的 : 一个计数信号量。从概念上讲,信号量维护了一个许可集。如...
2018-05-22 09:06:57 200
转载 Dubbo01--Dubbo入门基础及实例讲解
Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。一、Dubbo简介1.1、Dubbo是什...
2018-05-21 01:02:35 274
原创 Java自定义注解的使用场景和原理
什么是注解? 对于很多初次接触的开发者来说应该都有这个疑问?Annontation是Java5开始引入的新特征,中文名称叫注解。它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。为程序的元素(类、方法、成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑...
2018-05-14 01:01:16 11368 3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人