首页 > 系统相关 >JVM内存结构划分

JVM内存结构划分

时间:2024-08-03 14:28:18浏览次数:13  
标签:对象 回收 划分 内存 JVM 方法 垃圾

JVM内存结构的划分

1.堆

就相当于当你new一个对象的时候,就会分配一个堆内存给你,当对象销毁时就会有垃圾回收机制来回收这个对象的堆空间。

2.栈

就好比一串珠子,你只能从一头加或者取,要取后面的就要把前面的取出来才可以。

3.堆内存

  • 作用就是用来存放java中的对象和数组,当new一个对象或者new一个数组的时候就会在堆内存中开辟一个空间给它。用于存放。

  • 特点:第一个就是先进先出,后进后出,类似于一串珠子,一头来放,一头来出,先放进去的珠子可以先出来,后放进去的珠子要等前面的珠子出来以后才能进去。

  • 堆中的数据都具用默认的初始值。

  • 第二个 堆可以动态的分配内存大小,生存期事先不必告诉编译器,因为他是在运行的时候动态的分配内存,创建的对象当不再被指向时,将会被回收内存,内存回收需要通过jvm的自动垃圾回收器来管理,而C语言需要手动的清楚,这是java优于c的表现之一。

4.栈内存

  • 存在与java中的另一种内存,主要用来执行程序用的,比如基本类型的变量和对象的引用变量。

  • 它是由许多栈帧组成,而每个栈帧又包括了局部变量表、操作数栈、动态链接以及方法出口信息。每次方法调用都会将对应的栈帧压入虚拟机栈,当方法调用结束(方法调用return或者方法抛出异常)又会将该栈帧从虚拟机栈中弹出。由于栈的特性(FILO 先进后出,后进先出),每次操作的都是栈顶栈帧,又被称为“当前活动栈帧”,代表当前正在执行的方法。在JVM执行引擎运行时,所有指令都针对于当前活动栈帧进行操作。

  • 特点:”先进后出,后进先出

  • 栈的生存空间需要提前声明,而栈中数据的生存空间存在于{}大括号内,也就解释了为什么定义方法或者主函数的时候先要把方法体括起来。

  • 栈中的数据都没有初始值,需要手动的赋予

    JVM中堆和栈的主要区别:
    特性/内存区域 堆(Heap) 栈(Stack)
    存储内容 对象实例和数组 局部变量和方法调用记录
    内存管理 垃圾回收器自动管理 JVM自动管理,自动分配和回收
    生命周期 由垃圾回收器决定 与线程方法调用相对应,方法结束即释放
    访问速度 相对较慢 非常快
    内存大小 可配置,较大 相对较小,可配置
    线程私密性 所有线程共享 线程私有
    垃圾回收 是主要垃圾回收区域 通常不涉及垃圾回收
    内存泄漏问题 长时间持有对象引用可能导致内存泄漏 不太可能导致内存泄漏

标签:对象,回收,划分,内存,JVM,方法,垃圾
From: https://www.cnblogs.com/lnnnkq/p/18340461

相关文章

  • JVM:双亲委派,内存溢出,垃圾回收,JVM调优
    1,双亲委派1.1,类加载过程【加载】:加载是指将类的字节码文件读入内存,并在内存中创建一个Class对象,用来描述该类的结构信息。类的字节码可以来自本地磁盘、网络等各种来源。【连接】:连接是指对类的字节码进行验证、准备和解析的过程。验证:验证字节码文件的正确性和安全性。例......
  • 内存管理-25-内存初始化
    基于msm-5.4一、C代码部分1.调用路径_head//head.Sstext//head.S__primary_switch//head.S__primary_switched//head.Skaslr_early_init//kaslr.c最先调用,可配置会否生效与不生效,默认生效early_fix......
  • .Net内存管理释放的两种方式
    在.Net中,资源回收主要是指内存管理和非托管资源的释放。分别提供了两种主要的方式进行处理:垃圾回收(GC)确认性资源释放(DRD)官网相关文档的链接:https://learn.microsoft.com/zh-cn/dotnet/standard/managed-code垃圾回收(GarbageCollection)垃圾回收是.NET运行时自动处理内存管......
  • C语言数据在内存中的存储超详解
    文章目录1.整数在内存中的存储2.大小端字节序和字节序判断2.1什么是大小端?2.2为什么会有大小端?2.3练习3.浮点数在内存中的存储3.1一个代码3.2浮点数的存储3.2.1浮点数存的过程3.2.2浮点数取的过程3.3题目解析1.整数在内存中的存储在操作符......
  • Redis学习[5] ——Redis过期删除和内存淘汰
    六、Redis过期键值删除6.1Redis的过期键值删除策略6.1.1什么是过期键值删除?Redis中是可以对key设置过期时间的,所以需要有相应的机制将已过期的键值对删除,也就是**过期键值删除策略。Redis会用一个过期字典(expiresdict)**来存储有过期时间的所有key。当查询一个key时,Red......
  • Spark内存计算引擎原理与代码实例讲解
    Spark内存计算引擎原理与代码实例讲解关键词:Spark,内存计算,RDD,DAG,Shuffle,容错,分布式计算1.背景介绍1.1问题的由来随着大数据时代的到来,传统的基于磁盘的MapReduce计算框架已经无法满足实时计算、迭代计算等场景对计算性能的要求。Spark应运而生,其基于内......
  • 如何在两个不同的内存位置创建 int 1 ?
    我想向某人展示如何使用is而不是==来比较整数可能会失败。我认为这会起作用,但事实并非如此:>>>importcopy>>>x=1>>>y=copy.deepcopy(x)>>>xisyTrue我可以轻松地为更大的整数做到这一点:>>>x=500>>>y=500>>>xis......
  • 反射内存卡经典应用场景
    ARINC429模块在航空电子系统中扮演着至关重要的角色,‌其应用范围广泛且深入,‌确保了飞机各系统间数据的高效、‌准确和可靠传输。‌以下是对ARINC429模块典型应用场景的详细阐述。一、‌引言ARINC429,‌作为航空电子领域广泛采用的一种数字信息传输标准,‌自1977年提出以来,‌便以......
  • JDK、JRE和JVM简述
    JDK(JavaDevelopmentKit)JDK是Java开发环境的核心组件,包括:Java编译器、JRE(Java运行环境)JavaDoc文档生成器和其他一些工具。JDK是Java程序员开发Java应用程序所必需的软件包。JRE(JavaRuntimeEnvironment)也称为Java运行环境,它是Java应用程序运行的基础。它包含JVM和必要的Java......
  • 常见的内存泄漏及其解决方案
    内存泄漏是Java开发中一个常见且令人头疼的问题,即使在使用垃圾回收机制的Java中,也无法完全避免内存泄漏的出现。当对象不再需要时却仍然占据着内存,导致内存使用量不断增加,最终可能导致OutOfMemoryError。本文将深入探讨Java中常见的内存泄漏及其解决方案,附带详细的代码示例,帮......