JVM性能调优实战
使用jstack来分析死锁问题123456789101112131415161718192021222324252627282930313233343536373839public class Application { public static void main(String[] args){ System.out.println(" start th
使用jstack来分析死锁问题123456789101112131415161718192021222324252627282930313233343536373839public class Application { public static void main(String[] args){ System.out.println(" start th
企业级Java应用中经常碰到的问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 往往大多数人的处理办法只是重启服务,者调大内存,而不会深究问题根源。其实JVM自带了很多调优监控工具,例如jps、jstack、jmap、jhat、jstat、hprof等,下面我们对这些工具做一下详细的整理,以备不时之需。
Spring 框架给企业软件开发者提供了常见问题的通用解决方案,包括那些在未来开发中没有意识到的问题。但是,它构建的 J2EE 项目变得越来越臃肿,逐渐被 Spring Boot 所替代。Spring Boot 让我们创建和运行项目变得更为迅速,现在已经有越来越多的人使用它。我们已经在几个项目中使用了 Spring Boot ,今天我们就来一起讨论一下如何改进 Spring Boot 应用的性能。
如何使用ThreadLocal在系统中任意一个适合的位置定义个ThreadLocal变量,可以定义为public static类型(直接new出来一个ThreadLocal对象),要向里面放入数据就使用set(Object),要获取数据就用get()操作,删除元素就用remove(),其余的方法是非public的方法,不推荐使用。 下面是一个简单例子(代码片段1):1234567891011121
volatile关键字的两层语义一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义 保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。 禁止进行指令重排序。 先看一段代码,假如线程1先执行,线程2后执行:12345678//线程1boolean stop = false;while(!st
问题描述: 当git的branch配置成”*/dev”的时候, 构建的时候会出现多个后续版本1215:03:54 Multiple candidate revisions15:03:54 Scheduling another build to catch up with Test_Git 然后就会无限的自动重复构建。问题分析:从构建日志中可以看到:12> /usr/local/bin/git
JVM内存区域 程序计数器: 线程私有,存放当前线程所执行的字节码的行号,通过改变这个计数器的值来选取下一条需要执行的字节码命令。线程挂起恢复也需要通过该计数器恢复执行位置。 JVM栈: 线程私有,与线程的生命周期相同。每个方法执行的同时都会创建一个栈帧,存放局部变量,对象引用,方法出口等。 Java堆: 所以线程共享,几乎所有的对象实例都存在这里(有些产量,例如String会放在方法区的常量池中
LAMAX Distruptor是一个高性能,低延迟的producer-consumer框架。到底有多吊呢,可以参考Github上给出的性能测试结果:https://github.com/LMAX-Exchange/disruptor/wiki/Performance-Results 其核心就是RingBuffer这个东东, 感兴趣的同学可以参考下面的链接了解更多:http://mechaniti
JUnit大家一定都很熟悉了,这里就不做多的介绍。我们重点说一下p-unit的应用。p-unit是一款开源的测试框架,支持在多线程中跑同样的测试用例.比如你有如下JUnit的测试代码:12345678910public class sampleTest { @Test public void test1() { //some logic and asser