java中的内存分配可以定义为给java程序或服务分配存储的过程。 java中的内存分配是在JVM(Java虚拟机)内存中完成的,大致分为堆内存和非堆内存。本文将详细介绍堆内存和栈内存(相当于非堆内存)是如何分配给Java程序的。
广告 该类别中的热门课程 JAVA 掌握 - 专业化 | 78 课程系列 | 15 次模拟测试众所周知,java是一种面向对象的语言;因此,Java中创建的所有对象都存储在JVM(Java虚拟机)中。 JVM内存分为以下几个部分:
Java运行时在执行Java程序时使用堆内存为对象和类分配内存。每当在java中创建一个对象时,它就会存储在堆内存中。此外,垃圾收集进程在堆内存上运行,以释放不必要的空间;垃圾收集从堆区域中删除那些没有任何引用的对象。 java中的堆内存分为以下几个部分:
以下是有关 Java 堆内存的一些要点:
顾名思义,堆栈内存基于 LIFO(后进先出)原则。栈内存用于静态内存分配,java程序中的每个执行线程都有自己的栈内存。每当调用 Java 方法时,都会在 Java 堆栈内存中创建一个新块,用于保存本地或中间变量以及对方法中其他对象的引用。一旦该方法执行完成,堆栈中的内存块就会变空并被下一个方法使用。因此,堆栈内存大小小于堆内存。以下是堆栈内存的一些重要特性。
这是java中堆栈和堆内存的一个小比较:
Heap Memory | Stack Memory |
The entire application uses heap memory during its runtime. | The application in parts uses stack memory. That means it is used one at a time during thread execution. |
Heap memory is larger than stack memory. | Stack memory is small as compared to heap memory. |
All objects created during the application are stored in heap memory. | Stack memory only stores local variables and references to objects. |
Access to heap memory is slow. | Access to stack memory is fast as compared to heap memory. |
Heap memory is allocated by creating new objects and gets deallocated by a garbage collector. | Stack memory is automatically allocated and deallocated with the end in method execution. |
Heap memory stays as long as the application is running. | Stack memory stays only until a method is executing. |
现在我们将看到一个 Java 示例,展示如何分配内存
代码:
package com.edubca.javademo; class StudentData{ int rollNumber; String name; public StudentData(int rollNumber, String name) { super(); this.rollNumber = rollNumber; this.name = name; } public int getRollNumber() { return rollNumber; } public void setRollNumber(int rollNumber) { this.rollNumber = rollNumber; } public String getName() { return name; } public void setName(String name) { this.name = name; } } public class Main { public static void main(String[] args) { int id = 11; String name = "Yash"; StudentData s = null; s = new StudentData(id, name); System.out.println("Student Id is " + s.getRollNumber()); System.out.println("Student Name is " + s.getName()); } }
输出:
现在我们来看看上面的程序中内存是如何分配的:
1.在Main类中,进入main方法后,由于id、name是局部变量,因此在栈内存中创建了一个空间,如下所示:
2.对 StudentData 类构造函数的调用将添加到堆栈内存的顶部。结果,将存储以下内容:
3. StudentData类中声明的两个实例变量将存储在堆内存中。
以上是Java中的内存分配的详细内容。更多信息请关注PHP中文网其他相关文章!