引入 JAVA提供了一些分析DUMP的工具,比如jmap,visualvm 等 JAVA还有寻找线程状态的工具,jstack等 数据库也有检查连接数,连接状态的命令,status,processlist等 代码中也可以添加一些时间的信息,对比信息发现可优化的地方 但这些都不是今天要记录的内容,今天要做的是使用一个比较暴力的方式查找出高并发模式下运行缓慢的线程 正文 写高并发的时候经常会遇到的问题: 单独观察每个分支线程或者主线程时,都执行地非常快,但是总体上运行的TPS却并不高,没有达到期望的值…
终止线程的三种方法      有三种方法可以使终止线程.      1.  使用退出标志,使线程正常退出,也就是当run方法完成后线程终止.      2.  使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend.resume一样,也可能发生不可预料的结果).      3.  使用interrupt方法中断线程.  1. 使用退出标志终止线程      当run方法执行完后,线程就会退出.但有时run方法是永远不会结束的.如在服务端程序中使用线程进行监听客户端请求,或…
作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载. 前言 距离上一次更新博客有一段时间了,主要是因为最近有开发任务,另外,这段时间也在学习docker的相关知识,所以博客就没有继续写了,推荐一本书<Docker技术入门与实战>(第二版),想体验一下docker的朋友可以看一下. 按照计划,第二阶段主要是讲一下项目优化上的一些东西,相关的工具已经在基础篇介绍了一些,所以在本阶段更多的是侧重于代码上,虽然做了一份粗略的…
本文转自https://zhuanlan.zhihu.com/p/25713880. JVM的基础概念 JVM的中文名称叫Java虚拟机,它是由软件技术模拟出计算机运行的一个虚拟的计算机. JVM也充当着一个翻译官的角色,我们编写出的Java程序,是不能够被操作系统所直接识别的,这时候JVM的作用就体现出来了,它负责把我们的程序翻译给系统“听”,告诉它我们的程序需要做什么操作. 我们都知道Java的程序需要经过编译后,产生.Class文件,JVM才能识别并运行它,JVM针对每个操作系统开发其对应…
这是Java基础篇(JVM)的第一篇文章,本来想先说说Java类加载机制的,后来想想,JVM的作用是加载编译器编译好的字节码,并解释成机器码,那么首先应该了解字节码,然后再谈加载字节码的类加载机制似乎会好些,所以这篇改成详解字节码. 由于Java纯面向对象的特性,字节码只要能表示一个类的信息,就可以表示整个Java程序了,JVM只要能加载一个类的信息,就能加载整个程序了.所以,不管是字节码,还是JVM加载机制,关注点都是在类.我关注的点主要在于: 1. 由于字节码不是一次性全部加载进入内存,那么…
我可以和面试官多聊几句吗?只是想偷点技能过来.MySQL优化篇(基于MySQL8.0测试验证),上部分:优化SQL语句.数据库对象,MyISAM表锁和InnoDB锁问题. MyISAM表锁和InnoDB锁问题会在第二篇发布:MySQL优化篇,我可以和面试官多聊几句吗?--MyISAM表锁和InnoDB锁问题(二) 你可以将这片博文,当成过度到MySQL8.0的参考资料.注意,经验是用来参考,不是拿来即用.如果你能看到并分享这篇文章,我很荣幸.如果有误导你的地方,我表示抱歉. 接着上一篇MySQL…
我可以和面试官多聊几句吗?只是想... MySQL优化篇系列文章(基于MySQL8.0测试验证),上部分:优化SQL语句.数据库对象,MyISAM表锁和InnoDB锁问题. 面试官:咦,小伙子,又来啦. 我:面试官,您好.一面确实收获不少,二面想获取更多的经验. 面试官:不错,不错,不错,年纪轻轻,有我当年一半的风范,挺有觉悟.接着聊MySQL锁问题. 我:好呀,这次我准备了MyISAM和InnoDB锁一些总结,希望您多多指教. 面试官:那,让我们进入今天的话题,一起讨论MySQL锁问题. 我:…
在本人写的前一篇文章中,谈及有关如何利用Netty开发实现,高性能RPC服务器的一些设计思路.设计原理,以及具体的实现方案(具体参见:谈谈如何使用Netty开发实现高性能的RPC服务器).在文章的最后提及到,其实基于该方案设计的RPC服务器的处理性能,还有优化的余地.于是利用周末的时间,在原来NettyRPC框架的基础上,加以优化重构,本次主要优化改造点如下: 1.NettyRPC中对RPC消息进行编码.解码采用的是Netty自带的ObjectEncoder.ObjectDecoder(对象编码…
在前面LZ详细介绍了HashMap.HashTable.TreeMap的实现方法,从数据结构.实现原理.源码分析三个方面进行阐述,对这个三个类应该有了比较清晰的了解,下面LZ就Map做一个简单的总结. 推荐阅读: java提高篇(二三)-–HashMap java提高篇(二五)-–HashTable Java提高篇(二六)-----hashCode Java提高篇(二七)-–TreeMap 一.Map概述 首先先看Map的结构示意图 Map:"键值"对映射的抽象接口.该映射不包括重复的…
      在前面三篇博文中LZ讲解了(HashMap.HashSet.HashTable),在其中LZ不断地讲解他们的put和get方法,在这两个方法中计算key的hashCode应该是最重要也是最精华的部分,所以下面LZ揭开hashCode的"神秘"面纱. hashCode的作用       要想了解一个方法的内在原理,我们首先需要明白它是干什么的,也就是这个方法的作用.在讲解数组时(java提高篇(十八)------数组),我们提到数组是java中效率最高的数据结构,但是&quo…
前面一节主要介绍了数组的基本概念,对什么是数组稍微深入了一点点,在这篇博文中主要介绍数组的其他方面. 三.性能?请优先考虑数组 在java中有很多方式来存储一系列数据,而且在操作上面比数组方便的多?但为什么我们还需要使用数组,而不是替代它呢?数组与其他种类的容器之间的区别有三个方面:效率.类型和保存基本类型的能力.在java中,数组是一种效率最高的存储和随机访问对象引用序列的方式. 在项目设计中数组使用的越来越少了,而且它确实是没有List.Set这些集合使用方便,但是在某些方面数组还是存在一些…
      承接上篇博文:java提高篇-----异常(一) 五.自定义异常 Java确实给我们提供了非常多的异常,但是异常体系是不可能预见所有的希望加以报告的错误,所以Java允许我们自定义异常来表现程序中可能会遇到的特定问题,总之就是一句话:我们不必拘泥于Java中已有的异常类型. Java自定义异常的使用要经历如下四个步骤: 1.定义一个类继承Throwable或其子类. 2.添加构造方法(当然也可以不用添加,使用默认构造方法). 3.在某个方法类抛出该异常. 4.捕捉该异常. /** 自…
面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承是为了重用父类代码.两个类若存在IS-A的关系就可以使用继承.,同时继承也为实现多态做了铺垫.那么什么是多态呢?多态的实现机制又是什么?请看我一一为你揭开: 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底…
String作为Java中最常用的引用类型,相对来说基本上都比较熟悉,无论在平时的编码过程中还是在笔试面试中,String都很受到青睐,然而,在使用String过程中,又有较多需要注意的细节之处. 1.String是不可变类. 这句话其实大家都很熟悉了,那么具体什么是不可变类呢?一般认为:当对象一旦创建完成后,在正常情况下,对象的状态不会因外界的改变而改变(对象的状态是指对象的属性,包括属性的类型及属性值). 首先看一个基本的例子: String s = "abc"; System.o…
为了诊断oracle运行缓慢的问题首先要决定收集哪些论断信息,可以采取下面的诊断方法:1.数据库运行缓慢这个问题是常见还是在特定时间出现如果数据库运行缓慢是一个常见的问题那么可以在问题出现的时候收集这个时期的awr或者statspack报告(通常收集时间间隔是一个小时).生成awr报告的方法如下:awr是通过sys用户来收集持久系统性能统计信息并且这些信息保存在sysaux表空间.缺省情况下快照是一个小时生成一次并且保留7天.awr报告输出了基于指定快照之间的一系列的统计信息用于性能分析和调查其…
面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承是为了重用父类代码.两个类若存在IS-A的关系就可以使用继承.,同时继承也为实现多态做了铺垫.那么什么是多态呢?多态的实现机制又是什么?请看我一一为你揭开: 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底…
日常啰嗦 距离上一次更新博客有一段时间了,主要是因为最近有开发任务,另外,这段时间也在学习docker的相关知识,所以博客就没有继续写了,推荐一本书<Docker技术入门与实战>(第二版),想体验一下docker的朋友可以看一下. 按照计划,第二阶段主要是讲一下项目优化上的一些东西,相关的工具已经在基础篇介绍了一些,所以在本阶段更多的是侧重于代码上,虽然做了一份粗略的计划,但是第一篇该写什么又犯了纠结,刚好有一次编写代码时看到一个方法中含有System.out.print()打印语句,这个方法…
日常啰嗦 上一篇文章主要讲述了一下syso和Log间的一些区别与比较,重点是在项目的日志功能上,因此,承接前文<Spring+SpringMVC+MyBatis+easyUI整合优化篇(一)System.out.print与Log>,本文是一个较为直观的日志功能案例,java的日志框架很多,如Log4j.Log4j2.logback.SLF4J,篇幅有限,所以本篇只介绍一下Log4j,并将其整合到项目中,对于其他日志框架,想了解的可以对应的去学习一下. Log4j简介 日志记录功能是一个项目中…
前言 处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题.当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警. 本文主要针对系统运行缓慢这一问题,提供该问题的排查思路,从而定位出问题的代码点,进而提供解决该问题的思路. 对于线上系统突然产生的运行缓慢问题,如果该问题导致线上系统不可用,那么首先需要做的就是,导出jstack和内存信息,然后重启系统,尽快保证系统的可用性.这种情况可能的原因主要有两种: 代码中某个位置读取数据量较…
目录: PowerDNS简单教程(1):安装篇 http://www.cnblogs.com/anpengapple/p/5205130.html PowerDNS简单教程(2):功能篇 http://www.cnblogs.com/anpengapple/p/5205913.html PowerDNS简单教程(3):管理篇 http://www.cnblogs.com/anpengapple/p/5205951.html PowerDNS简单教程(4):优化篇(本篇)   位数的,于是我稍稍安…
处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题.当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警.本文主要针对系统运行缓慢这一问题,提供该问题的排查思路,从而定位出问题的代码点,进而提供解决该问题的思路. 对于线上系统突然产生的运行缓慢问题,如果该问题导致线上系统不可用,那么首先需要做的就是,导出jstack和内存信息,然后重启系统,尽快保证系统的可用性.这种情况可能的原因主要有两种: 代码中某个位置读取数据量较大,导致…
JavaScript性能优化篇js优化   随着Ajax越来越普遍,Ajax引用的规模越来越大,Javascript代码的性能越来越显得重要,我想这就是一个很典型的例子,上面那段代码因为会被频繁使用,所以才有了此优化的过程,我在本文中将指出一些重要的规则,介绍如何使用你的JavaScript.使用哪些工具以及你将从中得到什么好处. 确保代码尽量简洁 不要什么都依赖JavaScript.不要编写重复性的脚本.要把JavaScript当作糖果工具,只是起到美化作用.别给你的网站添加大量的JavaSc…
这篇文章主要为大家详细介绍了Java环境配置与编译运行的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 一.开篇 通过对之前Java之路的了解之后,相信初学者们都对Java有了一个比较深印象的了解了.但是事情不能总停留在理论层面,还得多多实现,才能见真知.我觉得,学习一样东西,要遵循理论——实践——理论这样一个套路.先了解事情的基本概念,弄懂基本概念后,要想方设法的用到生活的点点滴滴上,这样能加深理论的记忆以及发现自己的盲点.在重复的实践中,我们会逐渐对其有了自己的看法.想法,对理论…
Java并发篇 作者:星晴(当地小有名气,小到只有自己知道的杰伦粉) 1. Java锁 1.1 乐观锁 1.2 悲观锁 1.3 自旋锁 1.4 Synchronized 同步锁 1.4.1 核心组件 Wait Set:哪些调用 wait 方法被阻塞的线程被放置在这里: Contention List:竞争队列,所有请求锁的线程首先被放在这个竞争队列中: Entry List:Contention List 中那些有资格成为候选资源的线程被移动到 Entry List 中: OnDeck:任意时刻…
一.前言 从 0 到 1 学习的朋友可参考前置学习文章: 学习 Webpack5 之路(基础篇) 学习 Webpack5 之路(实践篇) 前置文章 学习 Webpack5 之路(基础篇) 对 webpack 的概念做了简单介绍,学习 Webpack5 之路(实践篇) 则从配置着手,用 webpack 搭建了一个 SASS + TS + React 的项目. 本篇将从优化开发体验.加快编译速度.减小打包体积.加快加载速度 4 个角度出发,介绍如何对 webpack 项目进行优化. 本文依赖的 we…
异常的概念 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error:如果你用System.out.println(11/0),那么你是因为你用0做了除数,会抛出java.lang.ArithmeticException的异常. 异常发生的原因有很多,通常包含以下几大类: 用户输入了非法数据. 要打开的文件不存在. 网络通信时连接中断,或者JVM内存溢出. 这些异常有的是因为用户错误…
假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,float,double.long)同样适用于该类情况. 但是如果你复制的是一个对象,情况就有些复杂了. 假设说我是一个beginner,我会这样写: class Student { private int number; public int getNumber() { return number…
前面LZ已经充分介绍了有关于List接口的大部分知识,如ArrayList.LinkedList.Vector.Stack,通过这几个知识点可以对List接口有了比较深的了解了.只有通过归纳总结的知识才是你的知识.所以下面LZ就List接口做一个总结.推荐阅读: java提高篇(二一)-----ArrayList java提高篇(二二)-----LinkedList java提高篇(二九)-----Vector Java提高篇(三一)-----Stack 一.List接口概述 List接口,成为…
TreeMap的实现是红黑树算法的实现,所以要了解TreeMap就必须对红黑树有一定的了解,其实这篇博文的名字叫做:根据红黑树的算法来分析TreeMap的实现,但是为了与Java提高篇系列博文保持一致还是叫做TreeMap比较好.通过这篇博文你可以获得如下知识点: 1.红黑树的基本概念. 2.红黑树增加节点.删除节点的实现过程. 3.红黑树左旋转.右旋转的复杂过程. 4.Java 中TreeMap是如何通过put.deleteEntry两个来实现红黑树增加.删除节点的. 我想通过这篇博文你对Tr…
在程序设计中,我们有时可能希望某些数据是不能够改变的,这个时候final就有用武之地了.final是java的关键字,它所表示的是“这部分是无法修改的”.不想被改变的原因有两个:效率.设计.使用到final的有三种情况:数据.方法.类. 一. final数据 有时候数据的恒定不变是很有用的,它能够减轻系统运行时的负担.对于这些恒定不变的数据我可以叫做“常量”.“常量”主要应用与以下两个地方: 1.编译期常量,永远不可改变. 2.运行期初始化时,我们希望它不会被改变. 对于编译期常量,它在类加载的…