专注Java教育14年 全国咨询/投诉热线:444-1124-454
赢咖4LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 Java堆空间与堆栈内存

Java堆空间与堆栈内存

更新时间:2021-08-23 11:09:25 来源:赢咖4 浏览749次

什么是Java堆空间

它是由Java虚拟机在启动时创建的。只要应用程序正在运行,就会使用内存。Java运行时使用它为对象和Java运行时环境 (JRE) 类分配内存。

创建对象时,它总是在Heap中创建并具有全局访问权限。这意味着可以从应用程序的任何地方引用所有对象。

它由两个概念管理:垃圾收集和年轻代、年老代。

垃圾收集通过清除方法中没有任何引用的对象来释放内存。这些是不再使用的对象。清除它们可确保它们不会占用堆中的空间。

年轻代、年老代通过将Java堆空间划分为两代来帮助确定垃圾收集对象的优先级。

托儿所是存储新对象的年轻一代。当托儿所已满时,垃圾收集会将其清理干净。请注意,只有托儿所的内存空间已满。老一代还有记忆。

老年代是对象的家园,它们已经存在了足够长的时间。当老年代空间用完时,垃圾回收会移除老年代空间中未使用的对象。同样,当旧的垃圾收集发生时,只有部分堆已满。托儿所还有空位。

什么是Java堆栈内存?

这是调用它们的方法时存储变量值的临时内存。方法完成后,包含这些值的内存将被清除,以便为新方法腾出空间。

当调用一个新方法时,会在堆栈中创建一个新的内存块。这个新块将存储该方法调用的临时值以及对存储在该方法正在使用的堆中的对象的引用。

此块中的任何值只能由当前方法访问,一旦结束将不存在。

当该方法结束时,该块将被擦除。调用的下一个方法将使用该空块。

这种“后进先出”方法可以轻松找到所需的值并允许快速访问这些值。

如何在Java应用程序中使用它们

让我们看一个非常简单的Java应用程序示例,了解如何分配内存。

包装融为一体。journaldev 。测试;包装融为一体。journaldev 。测试;public class Memory { public static void main ( String [] args ) { // 第 1 行 int i=1; // 第 2 行 Object obj = new Object(); // 第 3 行 Memory mem = new Memory(); // 第 4 行 mem.foo(obj); // 第 5 行 } // 第 9 行private void foo ( Object param ) {     
    // 第 6 行 String str = param.toString(); //// 第 7 行 System.out.println(str); } // 第 8 行}

在上面来自JournalDev.com 的例子中,Stack 和 Heap 的使用解释如下:

当程序运行时,所有运行时类都被加载到堆空间中。

Java 运行时在第 1 行发现 main() 方法线程时创建堆栈内存以供其使用。在第 2 行,创建一个原始局部变量,该变量存储在 main() 方法的堆栈内存中。

因为对象是在第 3 行创建的,所以它是在堆内存中创建的,它的引用存储在堆栈内存中。在第 4 行,创建 Memory 对象时会发生类似的过程。

在第 5 行调用 foo() 方法时,会为其创建 Stack 顶部的一个块。由于 Java 是按值传递的,因此在第 6 行的 foo() 堆栈块中创建了对 Object 的新引用。

在第 7 行,创建了一个字符串,它位于堆空间的字符串池中,同时在 foo() 堆栈空间中创建了它的引用。在第 8 行,foo() 方法被终止,堆栈中为其分配的内存块被释放。

最后,在第 9 行,main() 方法终止,并销毁为其创建的堆栈内存。因为程序在这一行结束,Java Runtime 释放所有内存并结束程序的执行。

主要区别

Java堆空间在整个应用程序中使用,但堆栈仅用于当前运行的方法(或多个方法)。

堆空间包含所有创建的对象,但堆栈包含对这些对象的任何引用。

存储在堆中的对象可以在整个应用程序中访问。原始局部变量只能访问包含它们的方法的堆栈内存块。

堆空间中的内存分配是通过一个复杂的、年轻代、年老代系统访问的。堆栈是通过后进先出 (LIFO) 内存分配系统访问的。

只要应用程序运行,堆空间就存在,并且大于堆栈,这是临时的,但速度更快。

以上就是赢咖4小编介绍的"Java堆空间与堆栈内存",希望对大家有帮助,想了解更多可查看Java堆栈。赢咖4在线学习教程,针对没有任何Java基础的读者学习,让你从入门到精通,主要介绍了一些Java基础的核心知识,让同学们更好更方便的学习和了解Java编程,感兴趣的同学可以关注一下。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>