zoukankan      html  css  js  c++  java
  • java 11 新的Epsilon垃圾收集器

    A NoOp Garbage Collector

    JDK上对这个特性的描述是: 开发一个处理内存分配但不实现任何实际内存回收机制的GC, 一旦可用堆内存用完, JVM就会退出.

    如果有System.gc()调用, 实际上什么也不会发生(这种场景下和-XX:+DisableExplicitGC效果一样), 因为没有内存回收, 这个实现可能会警告用户尝试强制GC是徒劳.

    用法 : -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC

    class Garbage {
    	int n = (int)(Math.random() * 100);
    	@Override
    	public void finalize() {
    		System.out.println(this + " : " + n + " is dying");
    	}
    }
    public class EpsilonTest {
    	
    	public static void main(String[] args) {
    		boolean flag = true;
    		List<Garbage> list = new ArrayList<>();
    		long count = 0;
    		while (flag) {
    			list.add(new Garbage());
    			if (list.size() == 1000000 && count == 0) {
    				list.clear();
    				count++;
    			}
    		}
    		System.out.println("程序结束");
    	}
    }
    
    

    如果使用选项-XX:+UseEpsilonGC, 程序很快就因为堆空间不足而退出

    使用这个选项的原因 :

    提供完全被动的GC实现, 具有有限的分配限制和尽可能低的延迟开销,但代价是内存占用和内存吞吐量.

    众所周知, java实现可广泛选择高度可配置的GC实现. 各种可用的收集器最终满足不同的需求, 即使它们的可配置性使它们的功能相交. 有时更容易维护单独的实现, 而不是在现有GC实现上堆积另一个配置选项.

    主要用途如下 :

    性能测试(它可以帮助过滤掉GC引起的性能假象)

    内存压力测试(例如,知道测试用例 应该分配不超过1GB的内存, 我们可以使用-Xmx1g –XX:+UseEpsilonGC, 如果程序有问题, 则程序会崩溃)

    非常短的JOB任务(对象这种任务, 接受GC清理堆那都是浪费空间)

    VM接口测试

    Last-drop 延迟&吞吐改进

  • 相关阅读:
    购买绝版书的好地方——淘宝
    ASP.NET MVC轻教程 Step By Step 1 ——入门
    ASP.NET MVC轻教程 Step By Step 2 ——View初探
    快速启动WebDev.WebServer的方法
    Surface RT使用手记
    ASP.NET MVC轻教程 Step By Step 3 ——使用ViewBag
    Asp.net MVC分页实例
    图示近四年来国外主流编程语言发展趋势
    ASP.NET MVC轻教程 Step By Step 4——Model、View和Controller
    Asp.net MVC使用KindEditor4
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/10351471.html
Copyright © 2011-2022 走看看