简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
jstack是一个很实用的工具,不仅能定位到死循环的位置,还能找到死锁的位置,这个工具对我们直接在生产机上定位错误带来了极大的方便,尤其是那些不容易复现的错误。首先呢,先写一个能产生死锁的代码。代码逻辑很简单,咱就产生两个线程,两个线程分别执行加锁与放锁两个动作,啥时候产生死锁呢,就是在两个线程都释放锁以后,又同时加锁,于是互相僵持,互相等待,产生死锁。import java.util.concu
wait()方法源于Object类,当线程调用wait的时候,意思就是说线程会放弃对象锁,进入等待此对象的等待锁定池。下面看看用jstack怎么定位wait方法。首先写一段简单的调用wait的代码:import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;class WaitTask impl
吓人啊,PATH设置出错,所有的命令全部找到不到了,提示说在/usr/bin/下面可以找到,课时cd过去以后还是不行。系统里面各种配置,各种下载,这是逼我重装系统吗?虽说是虚拟机,但也足够喝一壶了!幸亏export命令还能用:export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin这样所有的命令就都回来了,如果
在Java虚拟机中判断一个对象是否可以被回收,有一种做法叫可达性分析算法,也就是从GC Root到各个对象,如果GC Root到某个对象还有可达的引用链,那么这个对象就还不能被回收,否则就等着被收割吧。这里既然提到了GC Root,那么哪类对象可以作为GC Root呢,这是一个在面试中经常被问到的问题。《深入理解Java虚拟机》一书中是这么说的,一下几种对象可以作为GC Root:虚拟机栈中的引用
当前商业虚拟机基本上都是采用分代垃圾回收算法来回收垃圾,思想也很简单,就是根据对象的生命周期将内存划分,然后进行分区管理。在Java虚拟机分代垃圾回收机制中,应用程序可用的堆空间可以分为年轻代与老年代,然后呢,年亲代有被分为Eden区,From区与To区。当系统创建一个对象的时候,总是在Eden区操作,当这个区满了,那么就会触发一次YoungGC,也就是年轻代的垃圾回收。一般来说这时候不是所有的对
在Java虚拟机规范中,定义了这么两种异常:StackOverflowError与OutOfMemoryError。那么它们到底直接有啥区别呢?在《The Java ® Virtual Machine Specification Java SE 8 Edition》中是这么说的:The following exceptional conditions are associated with n
第一篇Linux有非常多的发行版本,从性质上划分,大体分为由商业公司维护的商业版本与由开源社区维护的免费发行版本。商业版本以Redhat为代表,开源社区版本则以debian为代表。这些版本各有不同的特点,在不同的应用领域发挥着不同的作用,不能一概而论。而绝大多数VPS上只提供开源社区维护的发行版本。下面就这些不同的Linux发行版进行简单的分析。UbuntuUbuntu近些年的粉丝越来越多,Ubu
自动装配(也就是依赖注入)是Spring一个十分重要的模块,Spring容器可以对Bean进行自动装配,自动装配真是个好技术,好处有:优点自动装配可以大大地减少属性和构造器参数的指派。自动装配也可以在解析对象时更新配置。任何事物有好就有坏,那自动装配有啥缺点呢?缺点在property和constructor-arg设置中的依赖总是重载自动装配,我们无法对原始类型(如int,long,bool
Java中遍历容器主要用for,在JDK 1.8中提供了forEach方法,源码如下:/*** Performs the given action for each element of the {@code Iterable}* until all elements have been processed or the action throws an* exception.Unl
正常情况下是这样的:但是install maven以后发现这个依赖还是不存在,这时候可以手动在项目目录下修改.classpath文件,添加如下内容:<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"><attributes><attribute name="mav