activator.createinstance 需要垃圾回收么_Epsilon:你为什么需要一个不回收内存的垃圾回收器?...
JDK 11中的JEP 318添加了一个名为Epsilon的垃圾回收器实现。Epsilon的特点是只负责分配内存,而不做任何垃圾回收操作。当堆内存空间就不够时,自动触发与OutOfMemoryError
相关的处理。一个不回收垃圾的垃圾回收器看起来很蠢,实际上在不少情况下都有着它的妙用。
在下面的代码中,size
的大小是10M
,在循环中分配100次,相当于要求1000M。如果通过-Xmx256M
指定堆内存的最大值是256M
,当使用正常的垃圾回收器时,下面的代码运行正常。
public class MemoryAllocation {public static void main(String[] args) {int size = 10 * 1024 * 1024;for (int i = 0; i < 100; i++) {int[] data = new int[size];}}
}
当通过选项-XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC
使用Epsilon之后,程序运行会抛出OutOfMemoryError
错误然后退出。这是因为可用的堆内存不能满足分配的需求。
那我们来看看Epsilon到底有哪些作用?
性能调优
在进行性能调优时,通常的做法是以当前的应用作为基础,运行性能测试之后得到相关的性能数据,以这个数据作为基准(baseline)。接着尝试修改某个参数,再运行同样的性能测试,得到新的性能数据,再与之前得到的基准值进行比较,从而判断该参数对性能的影响。这样做有一个重要的前提,那就是两次测试的结果应该只与这个参数的调整有关。如果有其他变量的存在,就无法建立性能差异与参数值之间的关联关系。而Java应用中的GC操作是不可控的。两次测试中GC操作造成的暂停时间,都会导致结果发生变化,会造成错误的判断。
这就体现出Epsilon的价值。因为Epsilon没有任何GC的动作,就排除了GC操作的干扰。这对性能测试的准确性是大有好处的。
测试内存分配
由于垃圾回收器的存在,大多数时候我们并不关注内存的分配,只是不断的创建对象,而依赖垃圾回收器完成对不使用的对象的回收。所以我们对于应用所分配的内存的上限并没有一个准确的认知。
如果你的应用需要对内存的分配进行限制,比如运行在资源受限的系统上,那么可以使用Epsilon并设置堆内存的最大值。这样可以测试应用是否满足这样的限制。如果不满足,那么应用会直接退出。
耗时短暂的任务
有些应用在设计时就只存在极短的时间。比如,一些定期运行的任务在启动之后只是执行一些简单的操作,然后就马上退出。对于这样的应用,进行GC操作是没有意义的。因为在JVM进程退出之后,它所占用的内存会自动被操作系统回收。可以通过Epsilon来在运行时停止GC操作。这样可以进一步降低任务的执行时间。
要求极低延迟的任务
有些应用对处理延迟有苛刻的要求。由于GC操作带来的暂停,对于这样的应用来说是不能接受的。通过Epsilon可以避免GC操作带来的暂停。这相当于用内存换取执行时间。
以上就是Epsilon的一些使用场景。如果你有类似的需求,Epsilon是一个很好的选择。
activator.createinstance 需要垃圾回收么_Epsilon:你为什么需要一个不回收内存的垃圾回收器?...相关推荐
- android垃圾软件还多吗,手机变慢是因为软件产生的垃圾过多吗?
很多人买了手机之后,感觉运行还算可以.可是,使用一段时间之后,手机运行速度就会变慢,而且随着使用时间的延长,手机运行越来越慢,还会卡顿,弄得人们心里很烦,以为软件产生的垃圾过多,又不能卸掉其中的软件, ...
- 想知道垃圾回收暂停的过程中发生了什么吗?查查垃圾回收日志就知道了!
\ 关键点 \ 垃圾回收日志中包括着一些关键性能指标: \ 要做一次正确的垃圾回收分析需要收集许多数据,所以好的工具是非常必要的: \ 除了垃圾回收之外还有很多事件都可能会让应用程序暂停: \ 让你的 ...
- createinstance.java_C# Activator.CreateInstance()方法使用
本文来自:http://blog.csdn.net/jaydawson/article/details/5539438 C#在类工厂中动态创建类的实例,所使用的方法为: 1. Activator.Cr ...
- java栈的回收_JAVA的堆栈和内存、垃圾回收解说
1.有关java健壮性特点的真相 很多书上都说java健壮性的特点是因为java使用数组代替了c++的指针:c++最令人头痛的问题就是内存问题,java的健壮性使编程人员不用再考虑内存的问题:这种观点 ...
- 【Android 内存优化】内存抖动 ( 垃圾回收算法总结 | 分代收集算法补充 | 内存抖动排查 | 内存抖动操作 | 集合选择 )
文章目录 一. 垃圾回收算法总结 二. 分代收集算法补充 三. 查看 Java 虚拟机 四. 获取 Android 应用可使用最大内存 五. 内存抖动标志 六. 排查内存抖动 七. 常见的造成内存抖动 ...
- 【转】Java内存与垃圾回收调优
要了解Java垃圾收集机制,先理解JVM内存模式是非常重要的.今天我们将会了解JVM内存的各个部分.如何监控以及垃圾收集调优. Java(JVM)内存模型 正如你从上面的图片看到的,JVM内存被分成多 ...
- PHP内存管理 垃圾回收
来源:http://www.jianshu.com/p/63a381a7f70c 概述 1) 操作系统直接管理着内存,所以操作系统也需要进行内存管理,计算机中通常都有内存管理单元(MMU) 用于处理C ...
- 使用Activator.CreateInstance完善简单工厂
前几天在项目中看到别人的工厂类使用Activator.CreateInstance() 之前用简单工厂都是用switch ...case ,之前没有用过便查了查资料,正是这个方法+ 反射简化了工厂模式 ...
- 后端学习 - JVM(上)内存与垃圾回收
JVM 架构图 文章目录 一 JVM 简介 二 类加载子系统: 1 作用 2 类的三个加载过程 3 类加载器的分类 4 双亲委派机制 5 两个 class 对象为同一个类的必要条件 三 运行时数据区: ...
最新文章
- ROS系统 创建工作空间与功能包
- Java提高篇——Java中的异常处理
- 俞敏洪回应新东方股价跌破1美元
- python数据类型-元组(tuple)
- 【java学习之路】(java SE篇)001.java初识
- 【VRP】基于matlab改进的模拟退火和遗传算法求解车辆路径规划问题【含Matlab源码 343期】
- 噪声报警c语言程序,环境噪声监测器(软件部分).doc
- 复制PS图层的样式到其它图层
- gmoj 6841. 【2020.11.5提高组模拟】淘淘蓝蓝之树林
- java的可执行文件_java生成可执行文件的方法总结
- 抗混叠滤波的Matlab解释
- MySQL 是什么?
- 【短视频SDK】短视频SDK License的策略
- AcWing 3725. 卖罐头 有意思的数学推导 思维
- 时隔27年,微软IE浏览器正式退出历史舞台,一个时代的结束
- 2020 国内公司前端团队都在搞些什么?
- 旋转矢量(法向量)转化欧拉角
- plotly使用基本介绍
- mysql常用增删改脚本 DBA可重复执行.sql文件
- 勤劳的人,一步一个脚印,加油