自定义博客皮肤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)
  • 资源 (2)
  • 收藏
  • 关注

原创 Exception -- 02 -- NoClassDefFoundError和ClassNotFoundException的区别

NoClassDefFoundError 和 ClassNotFoundException 这两个异常乍看之下,名字十分相似,但它们是两个完全不同的概念,NoClassDefFoundError 是一种 Error,是程序无法处理的系统错误,而 ClassNotFoundException 是一种 Exception,是程序可以处理的异常,现在我们来看看它们之间的具体区别一、NoClassDefFoundError当虚拟机在加载一个类时,如果该类在编译时是可用的,但是在运行时找不到该类的定义时,则

2020-05-31 15:03:52 147

原创 Exception -- 01 -- Error和Exception的区别

在日常的开发过程中,我们会碰到许多错误异常,可分为两类:一类是 Error,一类是 Exception,这里让我们来了解下它们之间的区别一、Java 异常体系二、Error 和 Exception 的区别Error是程序无法处理的系统错误,编译器不做检查Exception是程序可以处理的异常,捕获后可能恢复三、RuntimeException 和非 RuntimeException 的区别RuntimeException不可预知的,程序应当自行避免

2020-05-30 22:42:58 197

转载 SVN -- 01 -- Linux上搭建SVN服务

本文转载自:Linux下的SVN服务器搭建一、安装 SVNyum install -y subversion二、创建版本库目录mkdir -p /data/svn此处仅创建目录 (可自定义)为第三步中创建的版本库提供存放位置三、创建版本库svnadmin create /data/svn/projectproject 为版本库名称 (可自定义)四、修改配置文件cd /data/svn/project/conf文件作用.

2020-05-29 14:23:29 139

原创 Performance Tuning -- 09 -- Btrace应用示例

这里主要展示些 Btrace 相关的应用示例一、拦截简单参数监控方法@RestControllerpublic class HelloController { /** * 拦截简单参数 */ @GetMapping(value = "/arg/simple/{name}") public String argSimple(@PathVariable("name") String name) { return "Hello " +

2020-05-27 10:54:04 178

原创 Performance Tuning -- 08 -- Btrace的简单应用

当生产环境出现问题时,我们可能会需要获取程序运行时的相关参数来进行分析,而常规方法需要修改代码,将相关参数输入到日志中,再将项目重新发布到生产环境。不过要是这么做,一是十分繁琐,二是风险较大,此时 Btrace 就登场了一、安装 Btrace首先我们先上官网 (btrace) 下载 Btrace,这里我下载的是 1.3.11.3 版本接着配置 Btrace 环境变量 (替换成自己的安装路径)环境变量变量值JAVA_HOMED:\MySoftware\Java\jdk

2020-05-26 23:43:25 210 1

原创 Performance Tuning -- 07 -- Btrace常用配置解析

Btrace (Byte Trace) 是 Sun 公司推出的一款 Java 动态、安全追踪 (监控) 工具,可以在不停机的情况下监控系统运行情况,并且做到最少的侵入,占用最少的系统资源,也就是说 Btrace 可以动态地向目标应用程序的字节码注入追踪代码Btrace 脚本其实就是一个普通的 Java 类,只不过用 @Btrace 注解进行了修饰,一个 Btrace 脚本可以包含一个或多个拦截方法,需要注意的是,拦截方法必须用 public static void 进行修饰,否则启动 Btrace 脚本时

2020-05-26 23:22:56 174

原创 Performance Tuning -- 06 -- 使用JVisualVM监控远程Java进程

JVisualVM 除了监控本地的 Java 进程外,还可以监控远程的 Java 进程一、使用 JMX 远程监控 Tomcat修改 catalina.sh修改 Tomcat 的启动脚本,将 JMX 的相关参数添加进 Tomcat 的启动命令中,并启动 TomcatJAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9997 -Dcom.sun.manageme

2020-05-25 23:31:18 194

原创 Performance Tuning -- 05 -- JVisualVM的使用

在之前我们提到了,当遇到内存溢出、程序卡顿、CPU 占用率过高等情况下,我们可以通过 jmap、jstack 等 JDK 自带的命令通过命令行来进行分析,不过命令行操作不是很直观,那么有没有可视化的监控工具呢,答案是肯定的,这里我们就来了解下 JDK 自带的监控管理工具 JVisualVM一、功能概览JVisualVM 位于 JDK 的 bin 目录下,它可以监控本地所有的 Java 进程,这里我们启动之前测试内存溢出和死循环、死锁用到的项目应用程序如上所示,本地标签中展示了本地所有的

2020-05-25 22:49:27 182

原创 Performance Tuning -- 04 -- jstack分析死循环和死锁

这里我们通过 jstack 来分析下死循环和死锁的问题一、死循环示例CpuController.java@RestControllerpublic class CpuController { @GetMapping(value = "/loop/{data}") public String loop(@PathVariable("data") String data) { while (true) { int index = data.

2020-05-24 23:38:57 271

原创 Performance Tuning -- 03 -- jmap+MAT 分析内存溢出

这里我们通过 jmap 和 MAT 来分析下内存溢出的问题一、堆内存溢出User.java@Datapublic class User { private int id; private String name; public User(int id, String name) { this.id = id; this.name = name; }}MemoryController.java@RestControl

2020-05-24 22:41:11 256

原创 Performance Tuning -- 02 -- JVM监控和调优常用命令

在生产环境下,程序或多或少都会碰到卡顿、CPU 占用率高等问题,而因为是生产环境,我们不能随意地关闭或重启程序。此时,我们可以通过 JDK 自带的状态监控命令和图形化管理工具来定位和解决问题,并作出相应的优化一、jps (JVM Process Status Tool)用于列出正在运行的虚拟机进程,并显示虚拟机执行主类 (main() 方法所在的类) 名称以及虚拟机进程 ID命令格式jps [options] <hostid>格式说明参数名含义o

2020-05-24 17:14:10 310

原创 Performance Tuning -- 01 -- JVM常用命令

这里我们主要来了解下 JVM 中的常用命令一、JVM 参数分类标准参数 (-)在 JVM 的各个版本中基本不变,相对比较稳定非标准参数 (-X)在 JVM 的各个版本中可能会变,但变化的较小非稳定参数 (-XX)在 JVM 的各个版本中相对不稳定,主要用于 JVM 的性能调优以及 Debug,分为以下两类Boolean 类型格式含义-XX:[±] 表示启用 (+) 或者禁用 (-) name 属性key-value 类型.

2020-05-21 11:21:11 344

原创 Memory Model -- 14 -- Java内存模型

在计算机中,绝大多数的运算任务不可能只靠处理器的计算就能完成,处理器需要与内存进行交互,如:读取运算数据、存储运算结果等,这个 I/O 操作是很难消除的 (无法仅靠寄存器来完成所有运算任务)由于计算机的存储设备与处理器的运算速度有着几个数量级的差距,所以在现代计算机系统中都不得不加入一层或多层读写速度尽可能接近处理器运算速度的高速缓存 (Cache) 来作为内存与处理器之间的缓冲:将运算需要使用的数据复制到缓冲中,让运算能快速进行,当运算结束后再从缓存同步回内存之中,这样处理器就无须等待缓慢的内存读写了

2020-05-18 15:38:21 262

原创 Memory Model -- 13 -- volatile的基本概念

volatile 是 Java 虚拟机提供的最轻量级的同步机制,其具有以下两项特性保证被 volatile 修饰的共享变量对所有线程都是可见的,所谓可见性,是指当一个线程修改了被 volatile 修饰的共享变量时,新值对于其他线程来说是可以立即得知的禁止指令重排序优化一、volatile 的可见性volatile 变量在各个线程的工作内存中不存在一致性的问题,但是在 Java 中运算操作符并非是原子操作,因此 volatile 变量的运算在并发情况下是线程不安全的线程不安全

2020-05-18 15:32:27 296

原创 Concurrent -- 03 -- AQS源码解析

AQS (AbstractQueuedSynchronizer) 是用于构建锁或其他同步组件的基础框架类,在 Java 中许多并发工具类的内部类实现都依赖于 AQS,如:ReentrantLock、Semaphore、CountDownLatch 等,是 JUC 包的核心组件一、实现原理AQS 的核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态;如果被请求的共享资源被占用,则会阻塞当前请求资源的线程,并将其以及状态信息包裹成一个 Node

2020-05-17 22:24:31 223

原创 Concurrent -- 02 -- CAS源码解析

CAS (Compare And Swap),即比较并交换,是一种高效实现线程安全性的方法,其需要有三个操作数,分别是内存地址 (在 Java 中可以简单地理解为变量的内存地址,用 V 表示)、旧的预期值 (用 A 表示) 和准备设置的新值 (用 B 表示)属于乐观锁机制支持原子性更新操作,适用于计数器、序列发生器等场景CAS 操作失败时,由我们自行决定是否继续尝试,还是执行别的操作当执行 CAS 指令时,当且仅当 V 符合 A 时,处理器才会用 B 去更新 V 的值,否则它就不执行

2020-05-17 22:18:38 170

原创 Concurrent -- 01 -- ThreadPoolExecutor源码解析

在项目开发过程中,服务端会接收请求并进行处理,当请求数量不大时,我们可以为每个请求都分配一个线程,而当请求数量很大时,如果还是为每个请求都分配一个线程的话,会导致频繁地创建和销毁线程,从而大大降低了系统的效率,这个时候,线程池便派上了用场,通过对线程的重复使用,大大地提高了系统的效率总的来说,线程池的优点可以归纳为以下几点降低资源消耗通过重复利用已创建的线程降低线程创建和销毁造成的消耗提高响应速度当任务达到时,可以不需要等待新的线程创建就能立即执行提高线程的可管理性线程是

2020-05-17 22:15:05 270

原创 Thread -- 10 -- interrupt()、interrupted()、isInterrupted()方法的区别

一、interrupt()public void interrupt() { if (this != Thread.currentThread()) checkAccess(); synchronized (blockerLock) { Interruptible b = blocker; if (b != null) { interrupt0(); // Just to set the inte

2020-05-17 19:14:31 258

原创 Lock -- 04 -- ReentrantLock底层实现原理

ReentrantLock (重入锁) 是 Lock 接口最常见的一种实现,它与 synchronized 一样是可重入的,在基本语法上,ReentrantLock 也与 synchronized 很相似,只是代码写法上稍有区别而已ReentrantLock 相比 synchronized 增加了一些高级功能,主要有以下三项等待可中断是指当有锁的线程长期不释放锁的时候,正常等待的线程...

2020-05-02 16:47:56 883

微信公众号开发微信支付工具类

微信支付工具类,我自己的博客也用到了https://blog.csdn.net/goodbye_youth/article/details/80552265

2018-06-11

微信公众号开发消息加解密工具类

该工具类主要用于微信公众号消息的加解密,我自己的博客也用到了https://blog.csdn.net/goodbye_youth/article/details/80653132

2018-06-11

空空如也

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

TA关注的人

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