当前位置: 首页 > 面试题库 >

Java JVM标志CMSClassUnloadingEnabled实际做什么?

秋煌
2023-03-14
问题内容

CMSClassUnloadingEnabled除了一些非常模糊的高级定义(例如“摆脱PermGen问题”(不是,btw))之外,我一生无法找到Java VM标志实际作用的定义。

我查看了Sun / Oracle的站点,甚至选项列表都没有真正说明它的作用。

基于该标志的名称,我猜测CMS垃圾收集器默认情况下不会卸载类,并且此标志将其打开-但我不确定。


问题答案:

对于Java 5-7:

世界上标准的Oracle / Sun VM外观是:类永远存在。因此,一旦加载,即使没有人关心它们,它们仍保留在内存中。这通常没有问题,因为你没有那么多纯粹的“设置”类(=一次用于设置,然后再也不会使用)。因此,即使占用1MB的内存,谁在乎。

但是最近,我们有了类似Groovy的语言,它们在运行时定义了类。每次运行脚本时,都会创建一个(或多个)新类,并将它们永久保留在PermGen中。如果你正在运行服务器,则意味着内存泄漏。

如果启用CMSClassUnloadingEnabled,GC也会扫描PermGen,并删除不再使用的类。



 类似资料:
  • 问题内容: 什么是真正做? 它的定义是 刷新实体时,此字段中保存的所有实体也会刷新 但这实际上意味着什么?有人可以给我一个简单的例子吗? 问题答案: 单独的CascadeType描述可能会有些混乱,但是有一种简单的方法可以从一般情况中找出来。 对于任何值,这意味着如果使用接口在实例上调用了操作,并且该实例具有对其他实体实例的引用,并且已经定义了关联,则该操作也将应用于该关联实体。 因此定义为: 从

  • 我只是第一次涉足iOS开发,我必须做的第一件事就是实现一个自定义容器视图控制器——让我们称之为SideBarViewController——它交换了几种可能的视图控制器中的哪一种它显示的子视图控制器,几乎与标准的Tab Bar Controller一模一样。(它几乎是一个标签栏控制器,但有一个可隐藏的侧菜单,而不是标签栏。) 根据Apple文档中的说明,每当我向容器中添加子ViewControll

  • 问题内容: 我在这里找到了JVM标志。关于它们的作用有更详细的解释吗? 问题答案: 设置此标志会将JVM进行的所有垃圾收集写入日志文件(或stdout,但它的用处不大),并且可以使用[此处](http://codingdict.com/questions/2045提到的工具进行分析。使用此信息,您可以微调垃圾回收配置。

  • 我正试图把我的头缠在Apache Mesos上,需要澄清几个项目。 我对Mesos的理解是,它是一个安装在集群中的每个物理/VM服务器(“节点”)上的可执行文件,然后提供一个Java API(不知何故),将每个单独的节点视为计算资源(CPU/RAM/等)的集体池。因此,对于使用Java API编码的程序,他们只看到一组资源,而不必担心如何/在哪里部署代码。 因此,首先,我在这里的理解可能是根本错误

  • 从文档中可以看出,-Xss用于设置JVM的堆栈大小。但我对这一说法感到非常困惑。 在Java中,每个线程都有自己的堆栈。-Xss指定的数字是否: > 线程的每个堆栈的大小。e、 如果将-Xss设置为256K,则每个线程将有一个256K大的堆栈。因此,10个线程将总共使用2560K。 非常感谢你。 编辑: 谢谢你的回答。看起来像是上面的(2)senario-Xss指定特定线程的最大堆栈大小。 然后我

  • 我在看一个典型的for循环: 我对int I=1后的分号很满意:它是一个声明新变量的语句。如果i也是一个语句,为什么后面没有分号? 另一个例子。我打开Jshell并放置以下内容: 换句话说,命令可以工作,与是否有分号无关。我希望没有它就无法工作。 最后一个示例(改编自关于