【问题标题】:How does Java manager the memory? [closed]Java如何管理内存? [关闭]
【发布时间】:2018-08-17 21:24:08
【问题描述】:

我正在尝试了解 Java 是如何管理内存的。

我正在了解内存的哪一部分包含静态方法和静态变量。他们说 PermGen 内存包含静态变量和静态方法,这是非堆内存的一部分(下图)。

但是,据我所知,Java 有堆栈段来保存局部变量、参数、引用、非 void 函数返回的值......等等,堆段保存对象和数组。 我已经阅读了很多关于这个主题的问答,并且有两种解释方式:

  1. 分为 2 部分:堆内存和非堆内存。
  2. 分为3部分:栈段、堆段、代码段。

谁能帮助我更清楚地理解这一点。 如果内存分为两部分:堆栈在哪里? 如果内存分为三部分:哪一部分保存静态方法和静态变量?

如果能得到您的帮助,我将不胜感激:D 谢谢。

【问题讨论】:

标签: java


【解决方案1】:

底线,有两部分:

  • 堆栈:用于局部变量和控制程序执行
  • 堆:用于包含static 变量的所有对象,包括Class 类的实例。

在堆栈中,对象类型变量,包含对存储在堆中的对象的引用。

【讨论】:

  • 静态是否包含在特殊内存中,称为永久代? (您可以在我的帖子中看到图片)。感谢您的帮助兄弟:D
  • 是的,PermGen 是堆的一部分
  • Permgen 在 Java 8 中被删除:stackoverflow.com/questions/18339707/…。我们现在使用的是 Java 9。
【解决方案2】:

堆栈用于执行线程。它们包含特定于方法的短期值,以及对堆中从方法中引用的其他对象的引用。

堆内存用于为对象和java运行时环境类分配内存。

More

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-11-15
  • 2011-05-03
  • 2014-04-07
  • 1970-01-01
  • 1970-01-01
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多