Java内存溢出,JVM调优,Java性能优化

1.若是线程请求分配的栈容量超过java虚拟机栈容许的最大容量的时候,java虚拟机将抛出一个StackOverFlowError异常。

2.若是java虚拟机栈能够动态拓展,而且扩展的动做已经尝试过,可是目前没法申请到足够的内存去完成拓展,或者在创建新线程的时候没有足够的内存去建立对应的虚拟机栈,那java虚拟机将会抛出一个OutOfMemoryError异常。java

 

内存泄漏是指再也不被使用的对象或者变量一直被占据在内存中。可是java中有垃圾回收机制,它可以将再也不被使用的对象,自动从内存中清除。程序员

即便这样,java中也存在着内存泄漏的状况:缓存

  一:当长生命周期的对象持有短生命周期的对象的引用,就极可能发生内存泄漏。尽管短生命周期的对象已经再也不须要,可是长生命周期的对象一直持有它的引用致使其没法被回收。例如,缓存系统;加载一个对象放在缓存系统中,一直不去使用这个对象,可是它一直被缓存引用,因此不会被回收致使缓存泄漏。ide

检查java中的内存泄漏,必定要将程序各个分支状况都完成执行至结束,而后看其是否被使用过,若是没有才能断定这个对象属于内存泄漏。性能

  二:当一个对象被存储进HashSet集合中,就不可修改这个对象中用于计算哈希值的属性了。不然,对象修改后的哈希值与刚添加进HashSet集合时的哈希值不同,此时若是将当前对象的引用做为参数,用contains方法判断对象是否存在,则会返回找不到对象的结果。这会致使没法从HashSet单独删除当前对象,形成内存泄漏线程

 

垃圾回收是Java程序员了解最少的一部分. 他们认为Java虚拟机接管了垃圾回收,所以不必去担忧内存的申请,分配等问题. 可是随着应用愈来愈复杂,垃圾回收也愈来愈复杂,一旦垃圾回收变的复杂,应用的性能将会大打折扣. 因此,Java程序员了解垃圾回收的机制而且知道怎样解决“内存溢出”问题会有很大的益处. 对象

在Java中,有两个很是广泛的内存溢出问题. 一个是堆内存溢出,另外一个是持久代内存溢出. Java对象是java 类的实例. 每当建立一个Java对象时,Java虚拟机都会建立该对象的内部引用而且保存在堆中. 若是一个类是第一次访问,那么它必须经过Java虚拟机加载进来.生命周期

相关文章
相关标签/搜索