Java多线程编程也是Java面试中经常考察的内容.刚接触Java多线程编程的朋友们,可能会不慎写出一些会导致死锁(deadlock)的应用出来.如何分析造成Java多线程的原因呢?很多时候我们在怀疑造成死锁的语句设置断点,单步调试,反而又不能重现了.这种现象很正常,因为咱们单步调试和直接运行程序,代码执行的时序是不同的,很可能无法满足死锁的触发条件. 实际上,JDK已经给Java程序员提供了强大的死锁分析工具,能够直接分析一个正在运行的并且处于死锁状态的应用,并给出具体是哪一行Java代码引起…
本文版权归 远方的风lyh和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 开发时间久了,难免会写出一些一些死锁的代码,自己明明调用该方法可该方法就是不执行.不进该方法.日志也不打印! 这里我们模拟一段死锁的代码,使用jdk自带的管理工具来排查是不是死锁了! //死锁代码 public class DeadLockDemo implements Runnable{ public int flag = 1; //静态对象是类的所有对象共享的 private static Obj…
有时候在MyEclipse中,文件只能保存为“ISO-8859-1”的类型,而这种类型的文件时无法保存中文数据的,那么我们只能将中文数据经过Unicode编码才能往文件中保存,这里可以使用JDK自带的工具——native2ascii. 使用命令行窗口,输入“native2ascii”,如下图所示: 输完回车后,光标会另起一行,这时候就可以输入中文了,按回车结束,对应的Unicode码会在下一行显示:…
1.使用top工具,找出消耗CPU 较多的进程 [oracle@cuug ~]$ top top - 10:48:27 up 23:15,  4 users,  load average: 1.09, 0.43, 0.15 Tasks: 161 total,   3 running, 158 sleeping,   0 stopped,   0 zombie Cpu(s): 74.3%us, 23.7%sy,  0.0%ni,  0.0%id,  2.0%wa,  0.0%hi,  0.0%si…
一.运行程序TestGC 二.用jps找出当前应用的进程号PID 到jdk安装目录的bin目录下输入: jps -l PID为1264 三.启动Process Explorer(下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/process-explorer)1.找到PID为1264的进程,右键properties2.看到该进程的所有线程的性能排序3.找到名字为javaw.exe(eclipse启动)的两个线程,线程TID…
很多人说只能 F12 看见子类 其实vs里面有一个叫“对象浏览器” 通过这个就可以直接定位父类,不需要利用reflector之类的工具来找父类 具体如下:…
jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多.下面我们来一个实例找出某个Java进程中最耗费CPU的Java线程并定位堆栈信息,用到的命令有ps.top.printf.jstack.grep. 第一步先找出Java进程ID,服务器上的Java应用名称为mrf-center: root@ubuntu:/# ps -ef | grep mrf-center | grep -v grep root 21711 1 1 14:47 pts/3…
jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多.下面我们来一个实例找出某个Java进程中最耗费CPU的Java线程并定位堆栈信息,用到的命令有ps.top.printf.jstack.grep. 第一步先找出Java进程ID,服务器上的Java应用名称为mrf-center: root@ubuntu:/# ps -ef | grep mrf-center | grep -v grep root 21711 1 1 14:47 pts/3…
转自:https://www.ibm.com/developerworks/cn/linux/sdk/l-debug/index.html 本文讨论了四种调试 Linux 程序的情况.在第 1 种情况中,我们使用了两个有内存分配问题的样本程序,使用 MEMWATCH 和 Yet Another Malloc Debugger(YAMD)工具来调试它们.在第 2 种情况中,我们使用了 Linux 中的 strace 实用程序,它能够跟踪系统调用和信号,从而找出程序发生错误的地方.在第 3 种情况中…
我记得前段时间有个朋友问我为什么在emacs中打不开matlab程序?明明在terminal下是能打开的,却在emacs中不行. 今天自己最终遇到了相似的问题,我今天安装racket 6.0.安装好后racket程序的运行路径为/usr/local/racket/bin 然后我将这个路径增加到PATH里了,在terminal环境下能打开 接下来安装Geiser,它是emacs下连接racket的一个插件,它的安装非常easy,我是把它编译后的文件放到~/.emacs.d/site-lisp/ge…