为什么我不能关闭垃圾收集器?

首先让我们快速回顾一下我作为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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369619.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

background使用

background-position 有两个参数,定义背景图片起始位置可选值有: center top left right bottom px % background-size 可以用 px % 设定其宽高 值 cover 完全覆盖背景区域 contain 适应背景区域 background-origin 背景图片可以放置于 content-bo…

java牛客排序算法题_《剑指offer》面试题28:字符串的排列(牛客网版本) java...

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述: 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。这里尤其需要注意2点:1.所有组…

致第8年的自己

刚开始工作时,可能会用很多技术,知道很多技术就好像是很了不起的了。 但工作久了之后,如果还是只停留在知识的表面,技术只知个大概,那就显得太肤浅了。 别被人问倒,什么东西都能说出个一二,那才…

配置Ubuntu虚拟环境

配置Ubuntu虚拟环境 1.ubuntu默认root用户没有激活,激活root用户,就要为root用户创建密码$sudo passwd root2、修改主机名$vi /etc/hostname3、安装ssh服务$sudo apt-get install openssh-server//安装sshd服务$ sudo apt-get install openssh-server//开…

布局 — 样式重置

/* 清除默认内边距和外边距*/ body, dl, dd, h1, h2, h3, h4, h5, h6, p, form {margin: 0; } ol, ul {margin:0;padding:0; }/* 设置默认文字样式*/ html {font-size: calc((16 * 100vw) / 320);-webkit-text-size-adjust: none; } body, button, input, select, textarea {fo…

从Java执行可执行的命令行

在本文中,我们将介绍Java开发人员的常见需求。 从Java内部执行和管理外部流程。 由于这项任务很常见,因此我们着手寻找一个Java库来帮助我们完成它。 该库的要求是: 异步执行该过程。 能够中止流程执行。 等待流程完成的能力。 处理中的输…

java代码实现解压文件_Java压缩/解压文件的实现代码

用java压缩/解压文件:import java.io.*;import java.awt.*;import java.awt.event.*;import java.util.*;import java.util.zip.*;import javax.swing.*;//从压缩包中提取文件public class ZipExtractDemo extends JFrame{JFileChooser fileChooser; //文件选择器JT…

关于微信分享的一些心得之recommend.js(直接复制就行)

// import $ from jqueryimport Vue from vueexport default function (type,title,con,img,url,) { // 这里面的参数,你想怎么改就怎么改(你自己也可以添加),类型,标题,内容,图片&#xff0c…

前端之bootstrap模态框

简介:模态框(Modal)是覆盖在父窗体上的子窗体。通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动。子窗体可提供信息、交互等。 Modal简介Modal实现弹出表单Modal实现删除提示框其他用法…

Python Excel操作——xlrd、xlwd

读取 1、导入模块 import xlrd 2、打开Excel文件读取数据 data xlrd.open_workbook(excel.xls) 3、获取一个工作表 1 table data.sheets()[0] #通过索引顺序获取 2 table data.sheet_by_index(0) #通过索引顺序获取 3 table data.sheet_by_name(uSheet1)#通过名…

js方式调用php_举例说明JS调用PHP和PHP调用JS的方法

举例说明JS调用PHP和PHP调用JS的方法在学习任何一门编程语言,我们都会听到调用这个词,那么,在javascript中是如何调用php的呢?在php中也可以调用js吗?下面就让我们一起来看看吧。1、JS方式调用PHP文件并取得PHP中的值举…

Java大新闻不断涌现:Java SE 6和OpenJDK

我最近公布的最新的Java 8新闻 ,总结了一些最近的事态发展中的Java 8 。 自从发布该文章不到一周,就出现了更多重要的Java新闻报道,我在本文中总结了其中的一些内容。 共同的主题包括不同的Java SE 6实现和OpenJDK 。 Java安全性问题影响Ora…

如何在Hexo中实现自适应响应式相册功能

用最清晰简洁的方法整合一个响应式相册效果 技术选型 由于我选用的主题使用了fancyBox作为图片弹出展示的框架,查看后表示很不错,能满足需要http://fancyapps.com/fancybox/3/图片加载可能会太慢,所以还需要一个图片延迟加载插件 Lazyload想使…

vue css动画

.toggle-cart-enter-active, .toggle-cart-leave-active { transition: all .3s ease-out; } .toggle-cart-enter, .toggle-cart-leave-active { transform: translateY(100%); }

luinx php木马,Linux Bash Shell 寻找PHP(网站)挂马,后门

一php后门木马常用的函数大致上可分为四种类型:1. 执行系统命令: system, passthru, shell_exec, exec, popen, proc_open2. 代码执行与加密: eval, assert, call_user_func,base64_decode, gzinflate, gzuncompress, gzdecode, str_rot133. 文件包含与生成: requir…

关于类型安全的思考

这两天一初学python的哥们频频吐槽C#这样赋值时对类型的检查,让问题变难变复杂了. 解释几次类型检查的好处,效果不明显. 我也反思了一下, 类型检查真的是额外的包袱么?答案 是忠言逆耳利于行。 你是君王,语言是臣子,在君王犯错的时候: 一个臣子在事后说“你让我干的…

适用于MongoDB和Mongometer的SpiderMonkey至V8

通过10gen将MongoDB 2.3 / 2.4的默认JavaScript引擎从SpiderMonkey切换到V8,我想我将借此机会使用mongometer比较这些发行版的相对性能。 作为安全专家,我真的应该首先研究“ 其他身份验证功能” ……嘿。 我将记录比较过程中所采取的步骤(包…

vue todolist

最近初学vue&#xff0c;做最简单的todolist <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>todolist</title><style type"text/css">#container{width: 700px;height: 100px;padding: 40px;margin…

python函数-函数进阶

python函数-函数进阶 一、命名空间和作用域 1.命名空间 内置命名空间 —— python解释器     就是python解释器一启动就可以使用的名字存储在内置命名空间中     内置的名字在启动解释器的时候被加载进内存里全局命名空间 —— 我们写的代码但不是函数中的代码 …

php年龄查询表单设计,PHP 处理表单

用户评论:behnam jaza faza (2013-06-24 07:22:28)The note above says:"Also see the import_request_variables() function. "But dont:This function has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 5.4.0.Andy (2012-04-14 00:05:21)Just a reminde…