Java 中的内存分配:2022 年你需要知道的一切

已发表: 2021-01-10

java中的内存分配是指将计算机程序和服务分配给专用于虚拟内存空间的过程。 Java 虚拟机将内存分为栈内存和堆内存。 对于 Java 虚拟机,可以从堆栈和堆内存中最大程度地执行应用程序。 每次声明新变量或对象时,内存都会分配专门用于此类操作的内存。

目录

堆栈内存

java的Stock Memory分配用于静态内存和线程执行。 此内存中包含的值是临时的,并且仅限于特定方法,因为它们会以后进先出的方式不断被引用。

一旦调用内存并在堆栈内存中创建一个新块,堆栈内存就会保存原始值和引用,直到方法持续。 在其结束后,该块被刷新并可供新进程发生。 一般来说,堆栈内存的整体大小与堆内存的大小相比是微不足道的。

学习构建 Swiggy、Quora、IMDB 等应用程序

堆栈内存的特点

根据Java虚拟机 (JVM)内存分配的不同部分,以下是堆栈内存的一些离散特征:

  • 随着任何新方法被调用并相应地返回,堆栈内存可以增长或收缩。
  • 只要方法的范围存在,堆栈中的任何变量都可以运行。
  • 当方法执行时,它会自动分配和解除分配。
  • 在内存已满的情况下,java.lang.StackOverFlowError 会触发。
  • 与堆内存相比,它的访问速度更快。

阅读:全栈工程师与软件工程师:您应该选择哪一个?

java中栈内存分配使用的方法

  • Object push(Object element):在这里,一个项目被推到堆栈的顶部。
  • Object pop():任何位于栈顶的元素都会被刷新并返回。 如果在调用 pop() 时堆栈空置,则会发生异常 - EmptyStackException。
  • Object peek():在这里,顶部元素被返回但不进行刷新。
  • Boolean empty():如果循环在其堆栈中没有任何顶部值,则该函数返回 1(真),否则返回 0(假)。
  • In search(Object element):这用于了解堆栈中是否存在对象。 如果找到该值,则该函数从堆栈顶部返回元素的位置,否则返回-1。

阅读:面向初学者的 Java 项目和主题

Java 堆空间

Java 堆空间主要由 java 运行时使用,每次在其中创建和分配对象时都会发挥作用。 离散函数,如垃圾收集,不断刷新之前没有引用的对象使用的内存。 对于在堆空间中创建的对象,可以跨应用程序自由访问。

java中内存分配分为几个部分,即Heap、Stack、Code和Static。

Java 堆内存的特点

  • 可从复杂的内存管理技术访问,包括年轻代、老一代或永久代和永久代。
  • 在堆内存中,当它变满时,它会返回 java.lang.OutOfMemoryError。
  • 在这个内存中的访问比堆栈内存中的访问要慢。
  • 它不会进行自动释放,并且需要类似垃圾收集器的功能来移除异物,以使内存在最佳状态下工作。

java中栈和堆内存分配的一个例子是:

资源

堆空间和堆栈内存:基本差异

堆空间内存堆栈内存
应用程序的所有部分都调用堆内存。 堆栈内存执行仅限于单个线程。
每当创建对象时,它都会存储在堆空间中。 堆栈内存仅包含其引用和本地原始变量。
此处的对象可在整个应用程序中全局访问。 其他线程无法访问堆栈内存对象。
在这里,内存是根据年轻代和年老代定义的。 内存管理是在后进先出的基础上进行的。
内存根据应用程序的范围保持不变。 记忆是暂时的。
XMX 和 XMS JVM 等方法用于定义堆内存的最佳大小。 对于堆栈内存,它由 -XSS 方法确定。
这里, java.lang.OutOfMemoryError的异常发生在内存满的情况下。 在这里,如果内存已满,则会发生错误java.lang.StackOverFlowError
与堆栈内存相比,大小更大,但需要时间来处理。 由于其平滑的 LIFO 操作,尺寸更小但执行速度更快。

另请阅读:印度的 Java 开发人员薪水

从世界顶级大学在线学习软件课程获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。

结论

java中的内存分配有两种方式,主要是栈空间和堆空间。 我们希望它可以帮助您了解这一切的过程。

如果您有兴趣了解有关全栈软件开发的更多信息,请查看 upGrad 和 IIIT-B 的全栈软件开发执行 PG 计划,该计划专为在职专业人士设计,提供 500 多个小时的严格培训、9 个以上的项目,和任务、IIIT-B 校友身份、实用的实践顶点项目和顶级公司的工作协助。

Java中的内存管理是如何发生的?

Java 虚拟机 (JVM) 是用于运行以 Java 编程语言编写的程序的计算机程序。 它使使用内存管理的过程变得高效。 此外,它被设计为健壮的,因此即使操作系统发生崩溃,在 JVM 上运行的程序也不会受到影响。 内存管理意味着管理计算机系统中的每一块内存 (RAM)。 JVM 监控在需要时分配和释放内存。 一旦程序加载到内存中,JVM 就会为其分配内存空间。 这个过程称为堆。 堆是应用程序许多部分的公共内存空间。

什么是 Java 中的垃圾回收?

Java 虚拟机 (JVM) 使用引用计数来跟踪 Java 对象的数量。 在收集任何对象之前,对该对象的引用数必须达到零。 用户程序可以通过调用 finalize() 方法显式删除对象。 Finalize 是 Object 类中的一个静态方法,由垃圾收集器 (GC) 调用。 Finalize 方法将在垃圾收集器处理该对象之前释放该对象的所有资源。 垃圾收集器是清理不需要的对象的过程。 当 Java 运行时系统检测到 Java 堆快满时,就会触发 Garbage Collector 进程。 每个对象在 JVM 中都有一个位图。 为每个对象设置位图以跟踪它是否已被使用。 当位图变为 0 时,GC 会处理这个对象。

Java编程语言的特点是什么?

Java 编程语言是一种通用的高级编程语言,用于构建应用程序和小程序。 Java 软件可以在任何支持 Java 的平台上运行而无需重新编程。 Java 编程语言的特点是:面向对象的特性、健壮、高安全性、独立于平台、免费、易学易用。 Java 是一种面向对象的编程语言,它独立于平台,也可以在任何操作系统或平台上使用。 Java 是编译语言,生成字节码,然后在 Java 虚拟机中执行。