【问题标题】:Does .NET have something like Java's permgen?.NET 有类似 Java 的 permgen 的东西吗?
【发布时间】:2011-12-29 21:08:32
【问题描述】:

所以我有一个非常标准的 spring、hibernate、tomcat 环境。但我在本地和 CI 上获得 permgens。

我知道有一个临时修复(即增加分配给 permgen 的内存),但这仍然只是暂时的。鉴于我所看到的,我宁愿不去想象生产环境是什么样子。

(有点比较问题) 在 .NET 中,我没有看到任何类似的东西。 .NET 有它的 permgen 版本吗?

(如果你不知道什么是 permgen Significance of PermGen Space

【问题讨论】:

  • 您正在使用 C# 运行 spring、hibernate 和 Tomcat...?我很困惑。
  • 这不是 c# 的东西,而是 clr 的东西。 c# 只是一种语言
  • 您可以多描述一下 permgen 是什么以及它的属性。并且不确定您的第二段与其余段落有何关系。你对什么感兴趣?
  • 如果你不知道 permgen 是什么,请看stackoverflow.com/questions/2238522/…

标签: c# .net memory-management permgen


【解决方案1】:

CLR 中没有这样的东西。只是一个普通的堆。垃圾收集器 (GC) 是分代的,分为三代。一种用于年轻的物体,一种用于长寿的物体,一种用于非常长寿的物体。还有一个大对象堆(LOH)。 GC 对 LOH 的处理方式略有不同,以提高效率。见Large Object Heap Uncovered

【讨论】:

  • 实习字符串呢?那些不是有效的“permgen”吗?
  • 对字符串字面量(即在源代码中作为纯文本可见的字符串)进行了实习,但不适用于在运行时动态创建的字符串。您不能将其用作通用内存管理系统。
【解决方案2】:

不,CLR(C#“只是”一种 CLR 语言)没有永久代,请参阅Fundamentals of Garbage Collection

顺便说一句,JVM 的未来版本(目前预计最迟将用于 Java 8)也不会具有 permgen(请参阅 Oracle discusses Java 7 & 8 new features on video)(基本上是由于“合并”了具有permgen 和 JRockit JVM)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-27
    • 2015-11-03
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多