内容:
1.内存逃逸技术分析
2.内存逃逸技术实战
一、内存逃逸技术分析
1.逃逸是指在某个方法之内创建的对象,除了在方法体之内被引用之外,还在方法体之外被其它变量引用到;这样带来的后果是在该方法执行完毕之后,该方法中创建的对象将无法被GC回收,由于其被其它变量引用。正常的方法调用中,方法体中创建的对象将在执行完毕之后,将回收其中创建的对象;故由于无法回收,即成为逃逸。
2.逃逸在内存对象的时候,分配的对象不在Heap区域,导致降低GC的次数和负担,提高GC的效率,一种是JVM的Stack区域,一种是本地区域。
二、内存逃逸技术实战
package JVM;
/**
* FileName: JVMOps
* Author: hadoop
* Email: 3165845957@qq.com
* Date: 18-11-2 下午5:34
* Description:
*/
public class JVMOps {
/**
* 在JVM运行的时候会通过反射的方式到Method区域再带入口类的入口函数
* @param args
*/
public static void main(String[] args){
Worker worker = new Worker();
while (true){
worker.useWorker();
}
}
}
class Worker{
public Worker worker;
public Worker getWorker() {
return null == worker?new Worker(): worker;
}
public void setWorker(Worker worker) {
this.worker = worker;
}
public void useWorker(){
Worker obj = getWorker();
}
public void useWorker2(){
Worker obj = new Worker();
}
}
推荐一篇自己感觉写的很清楚的文章:JVM的逃逸技术介绍