dan*_*ben 44
PermGen空间是为长期对象保留的 - 主要是Class由对象加载的对象ClassLoader.PermGen不会被垃圾收集,除非在非常特殊的情况下(特别是当ClassLoader加载这些类超出范围时).
这是一个垃圾收集优化 - 如果我们不希望被垃圾收集的对象被单独存储,它会压缩存储其余对象的空间,这导致垃圾收集器的工作量减少.
PermGen特定于具有世代垃圾收集的VM.
如果你使用JRockit,那么"PermGen的意义"就不存在了,因为JRockit没有这个概念.
几年前,当奇怪的"出于PermGen空间"错误开始出现并且没有人知道它的错误(Tomcat + Hibernate + Sun VM用来触发它)来替换其中一个组件时,它常见(现在问题已被理解,但几年前当他们开始裁剪时,很难找到任何有关此问题的信息).你可以用Resin替换Tomcat或用JRockIt替换Sun VM等.
我认为重要的是要指出PermGen不是Java规范的一部分,只是(相当)一些VM的实现细节.
您真正需要知道的唯一事情是PermGen空间与常规堆分开,并且不受-XmxVM参数的影响.如果您的应用程序加载了许多类定义(如应用程序服务器或IDE),则可以使用-XX:MaxPermSizeVM选项设置PermGen空间大小.
| 归档时间: |
|
| 查看次数: |
11626 次 |
| 最近记录: |