随笔分类 - 【05】Java
摘要:背景 使用jmeter对系统进行压力测试,该业务流程请求大致调用:jmeter压力机 ——> A系统 ——> B系统 ——> A系统. A 系统作为基础平台,请求先到A系统,然后转到具体的B业务系统,B接口逻辑中需要调用A系统查询基础数据。 问题描述 当使用高并发访问系统时,整个系统卡住,A系统和B
阅读全文
摘要:一、如何访问服务器上arthas的webconsole和火焰图 比如192.168.0.100上运行arthas,java程序PID是2853,那么启动arthas方式如下: java -jar arthas-boot.jar --target-ip 0.0.0.0 --http-port 8563
阅读全文
摘要:为什么选择jmeter,业界用的广而且免费。本篇着重如何具体的开展性能测试:应该做哪些类型的性能测试?每种类型下采用什么类型线程组?每种类型监控数据的角度?在具体场景下的思路、具体配置? 一、性能场景的分析与创建压测的场景来源于性能需求,性能需求侧重点不同,选择的测试场景和压测类型也不相同。对于旧系
阅读全文
摘要:一、开发人员掌握性能测试的必要性 一说起测试,大部分想到的是业务功能测试。其实功能测试只是测试的一部分,另外还有性能测试、自动化测试、全链路测试、安全测试,不同规模、不同业务类型的的公司各有选择。自动化测试借助自动化工具代替人工按照预设条件进行测试,也可用于持续集成(比如和jenkins整合),目的
阅读全文
摘要:一、摘要 由于硬件问题、系统资源紧缺或者程序本身的BUG,Java服务在线上不可避免地会出现一些“系统性”故障,比如:服务性能明显下降、部分(或所有)接口超时或卡死等。其中部分故障隐藏颇深,对运维和开发造成长期困扰。笔者根据自己的学习和实践,总结出一套行之有效的“逐步排除”的方法,来快速定位Java
阅读全文
摘要:性能问题表象就是应用系统运行慢,影响客户体验。要解决性能问题也无非就是找到原因然后根据原因对症下药。本文从这两方面概述Java应用性能分析与调优方法论。 一、性能分析的思路 性能分析主要是监测代码中各个方法的运行耗时,常见有两种思路:插桩和抽样。1、插桩分析器插桩就是人为或者切面代理自动在方法的开头
阅读全文
摘要:JDK命令行:jps、jinfo、jstat、jmapMAT:Eclipse Memory AnalyzerJMX - Jconsole,VisualVMBtrace:https://blog.csdn.net/ZYC88888/article/details/81662671火焰图Flight R
阅读全文
摘要:环境 jdk version:jdk1.8.0_171 线程池的接口、类关系图: 线程池的引入,主要解决以下问题: 减少系统因为频繁创建和销毁线程所带来的开销; 自动管理线程,对使用方透明,使其可以专注于任务的构建。 一、ThreadPoolExecutor 1、构造线程池 /** * 使用给定的参
阅读全文
摘要:环境 jdk version:jdk1.8.0_171 一、Executor接口执行器接口,也是最顶层的抽象核心接口, 分离了任务和任务的执行。 二、ExecutorService接口在Executor的基础上提供了执行器生命周期管理,任务异步执行等功能。在Executor的基础上增强了对任务的控制
阅读全文
摘要:环境 jdk version:jdk1.8.0_171 一、CountDownLatchCountDownLatch是一个辅助同步器类,用来作计数使用,它的作用类似于生活中的倒数计数器,先设定一个计数初始值,当计数降到0时,将会触发一些事件,如火箭的倒数计时。初始计数值在构造CountDownLat
阅读全文
摘要:环境 jdk version:jdk1.8.0_171 原子包不需要使用同步器,而是单纯的使用CAS+自旋实现同步效果,CAS主要通过Unsafe来实现。 一、基本类型(AtomicInteger, AtomicLong, AtomicBoolean)AtomicInteger是Integer类型的
阅读全文
摘要:AQS(AbstractQueuedSynchronizer)框架提供了一套通用的机制来管理同步状态、阻塞/唤醒线程、管理同步队列。 一、同步机制AQS框架描述了一个什么样的锁? 1、锁的使用人AbstractOwnableSynchronizer父类里定义了一个字段-拥有锁的线程,以及相应的set
阅读全文
摘要:本章做一下总览各种并发的实现方式,传统方式比较常见,在大并发场景下一般会使用JUC并发包,下面列了一张juc包概览图,每一类会在后面文章中详细介绍原理和使用。 一、传统的java线程并发支持 1、线程同步使用synchronized 2、线程通信使用wait、notify、notifyAll、joi
阅读全文
摘要:使用线程更好的提高资源利用率,但也会带来上下文切换的消耗,频繁的内核态和用户态的切换消耗,如果代码设计不好,可能弊大于利。 一、线程 进程是分配资源的最小单位,线程是程序执行的最小单位;线程是依附于进程的,一个进程可以生成多个线程,这些线程拥有共享的进程资源; 二、线程生命周期(相关API)1、5个
阅读全文
摘要:一、计算机内存模型 针对计算机机器而言,操作系统、JVM程序等其他所有程序都需要遵循内存模型规范。1、CPU技术发展1.1 CPU缓存的出现CPU的发展快于内存条,CPU的运算速度越来越快,内存条的读写速度无法适应CPU的速度,那么就在CPU和内存条之间加上高速缓存来适配; (1)缓存有L1-一级缓
阅读全文
摘要:一、SPI机制 二、注解处理机制 三、版本差异
阅读全文
摘要:一、Unsafe类Java不能直接访问操作系统底层,而是通过native方法来访问。sun.misc.Unsafe类提供了硬件级别的原子操作:裸内存的申请/释放/访问,底层硬件的atomic/volatile支持,创建未初始化对象等,具体提供了82多个public native方法,通过调用底层C/
阅读全文
摘要:为了更灵活的控制对象的生命周期,在JDK1.2之后,引用被划分为(引用的级别和强度由高到低)强引用、软引用、弱引用、虚引用四种类型,每种类型有不同的生命周期,它们不同的地方就在于垃圾回收器对待它们会使用不同的处理方式。在Java中,垃圾回收器线程一直在默默的努力工作着,但你却无法在代码中对其进行控制
阅读全文
摘要:一、概念java加载class文件分两种情况:(1)类型是编译器已知的,这种文件的.class文件在编译的时候,编译器会把.class文件打开(不加载)检查,称为Run- Time Type Identification 运行时类型识别(2)从其它地方获取引用,然后动态的把这个未知类型的引用的对象的
阅读全文