为什么我不能关闭垃圾收集器?
首先让我们快速回顾一下我作为Java开发人员的职业生涯的早期。 我想消除正在进行的测试中的垃圾回收(GC)暂停。 瞧,当我发现无法完成时,我很生气。 那时,我将问题抛在了“设计错误”上,并继续前进。 对James Gosling或对该决定负责的人感到生气。
几天前,我遇到了一种使我想起过去的时代的情况。 幸运的是,过去的岁月在我体内积累了一些关于JVM内部的见解,我认为我会以博客文章的形式分享我的最新想法。
首先,你们中的某些人可能还记得我们在90年代后期使用的Java 1.1。 那时,您实际上就有可能关闭GC。 至少在Solaris(Sun提供的JVM版本)中,可以在您的JVM启动参数中添加-noasyncgc
选项。 在向后兼容JDK 1.4之前,仍然支持该选项,但是从JDK 1.2开始,它什么也没做。 除了增加启动脚本的复杂性。
该选项关闭了JVM控制的垃圾收集器。 您仍然可以通过从代码中显式调用System.gc()
来收集未使用的对象。 听起来像经验丰富的工程师可以很好地利用灵活性。 那么–为什么要删除此选项?
实际上,考虑以下因素后,此举背后的动机就变得有意义了:
- 通过禁用GC,您实际上声称您知道应用程序在运行时需要多少内存。 但是,如果您错了怎么办? 堆填满后,禁用GC将导致应用程序终止。
- 调用
System.gc()
可能根本不执行垃圾回收。 在现代JVM中,仅是向JVM建议“我认为这是运行GC的好地方”。 并且–您的sysadmin可能通过指定-XX:+DisableExplicitGC
启动参数完全禁用了System.gc()
调用。 - 如果
System.gc()
实际上是由JVM执行的,则将导致完整的垃圾回收。 对于大堆,这往往非常昂贵,并且会导致较长的暂停时间。 - 通过调用
System.gc()
仍然无法实现可预测的GC计时,尤其是在多线程应用程序中。现在,看一下以上几点,并想象一个可以在没有自动GC的JVM中运行的应用程序。 您可能不想将房子押在房子的行为上。 当我尝试描绘调试会话以跟踪该应用程序的任何性能问题时,我的后背上的头发立即开始冒起。 所以也许先生。 戈斯林毕竟没有犯过设计错误。
但是,如果我停下来的停顿时间太长了,该怎么办? 我真的希望关闭GC吗? 实际上有一些可能性:
- JVM分配了一部分内存,您可以在其中关闭GC。
但是,我建议您仅在确定要做什么时才转向这些解决方案。 在99.9%的情况下,垃圾收集器会比您更聪明。
参考: 为什么我不能关闭垃圾收集器? 由我们的JCG合作伙伴 Nikita Salnikov Tarnovski在Plumbr Blog博客上获得。
翻译自: https://www.javacodegeeks.com/2012/12/why-cant-i-turn-off-the-garbage-collector.html
为什么我不能关闭垃圾收集器?相关推荐
- 垃圾收集算法,垃圾收集器_为什么我不能关闭垃圾收集器?
垃圾收集算法,垃圾收集器 让我们开始快速回顾一下我作为Java开发人员的职业生涯的早期. 我想消除正在进行的测试中的垃圾回收(GC)暂停. 瞧,当我发现无法完成时,我很生气. 那时,我把问题留在了&q ...
- 《深入理解Java虚拟机》-----第3章 垃圾收集器与内存分配策略
Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来. 3.1 概述 说起垃圾收集(Garbage Collection,G ...
- JVM 调优实战--常见的垃圾回收算法及垃圾收集器组合
什么是垃圾 C语言申请内存:malloc free C++: new delete c/C++ 手动回收内存 Java: new ? 自动内存回收,编程上简单,系统不容易出错,手动释放内存,容易出两种 ...
- 垃圾收集器与内存分配策略(五)之垃圾日志与常见参数
2019独角兽企业重金招聘Python工程师标准>>> 垃圾收集器与内存分配策略(五)--垃圾日志与常见参数 理解GC日志 每个收集器的日志格式都可以不一样,但各个每个收集器的日志都 ...
- hotspot 垃圾收集器_HotSpot增量Java垃圾收集器
hotspot 垃圾收集器 在我最近的博客文章" 确定活动的HotSpot垃圾收集器"中 ,我描述了可用于确定HotSpot JVM (Java进程)正在使用的垃圾收集器(当从命令 ...
- 垃圾收集算法,垃圾收集器_弱,弱,最弱,利用专家参考来管理垃圾收集器
垃圾收集算法,垃圾收集器 何时以及何时不使用Java中的专家引用 弱引用,软引用和幻像引用既危险又强大. 如果以错误的方式使用它们,则会破坏JVM性能. 但是,如果使用正确的方法,它们可以大大提高性能 ...
- HotSpot增量Java垃圾收集器
在我最近的博客文章" 确定活动的HotSpot垃圾收集器"中 ,我描述了可用于确定HotSpot JVM (Java进程)正在使用的垃圾收集器(当从命令行参数(标志) 中看不出来) ...
- 弱,弱,最弱,利用专业参考来利用垃圾收集器
何时以及何时不使用Java中的专家引用 弱引用,软引用和幻像引用是危险且强大的. 如果以错误的方式使用它们,则会破坏JVM性能. 但是,如果使用正确的方法,它们可以大大提高性能和程序清晰度. 弱引用和 ...
- JVM初探:内存分配、GC原理与垃圾收集器
JVM内存的分配与回收大致可分为如下4个步骤: 何时分配 -> 怎样分配 -> 何时回收 -> 怎样回收. 除了在概念上可简单认为new时分配外, 我们着重介绍后面的3个步骤: I. ...
最新文章
- 那些复杂的技术设计的开始离我们并不遥远
- Ubuntu16.04 LTS上安装Go1.10
- 面试:知道 CopyOnWriteArrayList 吗?
- mysql 视图列信息_MySQL 中获取用户表、用户视图、用户表中列信息
- 机器学习入门10 - 正则化:简单性(Regularization for Simplicity)
- python selenium T3
- imx6 android power off
- 什么是pom文件_什么是POM?
- 消消乐游戏原理(附部分代码)
- 直流侧电力有源滤波器滤除谐波干扰的原理及方案
- 【Godot】通过属性检查器显示对应节点的脚本属性
- 校园一卡通的实现机制(图解)
- (C#)Windows Shell 外壳编程系列总结
- 拼团模式--社交电商的常见营销手法
- #1024程序员节#活动勋章获取方式
- m基于matlab的无线光通信CDMA闭环链路功率控制算法仿真,对比了OOK,2PPM,4PPM,8PPM,16PPM
- SMB2协议特性之oplock与lease(下)
- Windows:直接使用命令运行一个程序
- 华为融合电信云解决方案包括_华为云解决方案.ppt
- 四款超好用的甘特图软件