广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >关于java中堆内存与栈内存的详细分析
  • 122
分享到

关于java中堆内存与栈内存的详细分析

java入门java堆内存栈内存分析 2017-04-01 13:04:37 122人浏览 才女
摘要

一、概述在Java中,内存分为两种,一种是栈内存,另一种就是堆内存。二、堆内存什么是堆内存?堆内存是Java内存中的一种,它的作用是用于存储Java中的对象和数组,当我们new一个对象或者创建一个数组的时候,就会在堆内存中开辟一段空间给它,

一、概述

在Java中,内存分为两种,一种是栈内存,另一种就是堆内存。

二、堆内存

什么是堆内存?

堆内存是Java内存中的一种,它的作用是用于存储Java中的对象和数组,当我们new一个对象或者创建一个数组的时候,就会在堆内存中开辟一段空间给它,用于存放。

堆内存的特点是什么?

第一点:堆其实可以类似的看做是管道,或者说是平时去排队买票的的情况差不多,所以堆内存的特点就是:先进先出,后进后出,也就是你先排队,好,你先买票。

第二点:堆可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,但缺点是,由于要在运行时动态分配内存,存取速度较慢。

new对象在堆中如何分配?

由Java虚拟机的自动垃圾回收器来管理。

免费视频教程分享:java视频教程

三、栈内存

什么是栈内存

栈内存是Java的另一种内存,主要是用来执行程序用的,比如:基本类型的变量和对象的引用变量。

栈内存的特点

第一点:栈内存就好像一个矿泉水瓶,像里面放入东西,那么先放入的沉入底部,所以它的特点是:先进后出,后进先出

第二点:存取速度比堆要快,仅次于寄存器,栈数据可以共享,但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性

栈内存分配机制

栈内存可以称为一级缓存,由垃圾回收器自动回收

数据共享

例子:

int a = 3;
int b = 3;

第一步处理:

编译器先处理int a = 3;

创建变量a的引用

在栈中查找是否有3这个值

没有找到,将3存放,a指向3

第二步处理:

处理b=3

创建变量b的引用

找到,直接赋值

第三步改变:

接下来

a = 4;

同上方法

a的值改变,a指向4,b的值是不会发生改变的。

PS:如果是两个对象的话,那就不一样了,对象指向的是同一个引用,一个发生改变,另一个也会发生改变。

四、栈和堆的区别

JVM是基于堆栈的虚拟机,JVM为每个新创建的线程都分配一个堆栈。也就是说,对于一个Java程序来说,它的运行就是通过对堆栈的操作来完成的。堆栈以帧为单位保存线程的状态。JVM对堆栈只进行两种操作:以帧为单位的压栈和出栈操作。

差异点:

堆内存用来存放由new创建的对象和数组。

栈内存用来存放方法或者局部变量等。

堆是先进先出,后进后出。

栈是后进先出,先进后出。

相同点:

都是属于Java内存的一种。

系统都会自动去回收它,但是对于堆内存一般开发人员会自动回收它。

更多相关文章教程分享:java零基础入门

--结束END--

本文标题: 关于java中堆内存与栈内存的详细分析

本文链接: https://www.lsjlt.com/news/4369.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 关于java中堆内存与栈内存的详细分析
    一、概述在Java中,内存分为两种,一种是栈内存,另一种就是堆内存。二、堆内存什么是堆内存?堆内存是Java内存中的一种,它的作用是用于存储Java中的对象和数组,当我们new一个对象或者创建一个数组的时候,就会在堆内存中开辟一段空间给它,...
    99+
    2017-04-01
    java入门 java 堆内存 栈内存 分析
  • 详细总结Java堆栈内存、堆外内存、零拷贝浅析与代码实现
    目录一、堆栈内存二、堆外内存三、零拷贝一、堆栈内存 堆栈内存,顾名思义,指的是堆内存以及栈内存,其中,堆内存是由Java GC进行管理的内存区域,而栈内存则是线程内存。关于栈内存,这...
    99+
    2022-11-12
  • Java堆栈内存、堆外内存、零拷贝的示例分析
    这篇文章将为大家详细讲解有关Java堆栈内存、堆外内存、零拷贝的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、堆栈内存堆栈内存,顾名思义,指的是堆内存以及栈内存,其中,堆内存是由Java GC...
    99+
    2023-06-15
  • 详细分析Java内存模型
    目录一、为什么要学习并发编程二、为什么需要并发编程三、从物理机中得到启发四、Java 内存模型五、原子性5.1、什么是原子性5.2、如何保证原子性六、可见性6.1、什么是可见性6.2...
    99+
    2022-11-12
  • C++程序内存栈区与堆区模型案例分析
    目录栈区:栈区代码演示:堆区:堆区代码演示:new操作符:new操作符代码演示:栈区: 由编译器自动分配释放,存放函数的参数值,局部变量等(由编译器管理其“生死&rdqu...
    99+
    2022-11-13
  • Android adb shell 查看App内存(java堆内存/vss虚拟内存/详细的内存状况/内存快照hprof)和系统可用内存
    1.adb shell 获取app 进程的pid adb shell "ps|grep com.xxx包名" 根据某个渠道包,去查询对应的pid,如下所示: 2.通过adb shell 查看设备的j...
    99+
    2023-09-03
    android adb java
  • Node中堆内存分配的示例分析
    这篇文章将为大家详细讲解有关Node中堆内存分配的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。V8 垃圾回收简介首先,简单介绍一下V8垃圾回收器。内存的存储分配...
    99+
    2022-10-19
  • C语言与C++内存管理超详细分析
    目录一、内存1.1 内存四区1.2 使用代码证实内存四区的底层结构二、malloc 和 free2.1 malloc 和 free 的使用2.2 内存泄漏与安全使用实例与讲解三、ne...
    99+
    2022-11-13
  • java内存管理关系及内存泄露的原理分析
    目录java内存管理关系及内存泄露原理java对象和内存的关系创建对象null的作用内存泄露检测内存泄露的原理java内存管理关系及内存泄露原理 这可能是最近写的博客中最接近底层的了...
    99+
    2022-11-12
  • C语言详细分析浮点数在内存中的储存
    目录浮点数的储存格式初步了解深入探究E不全为0或不全为1E全为0E全为1浮点数的储存格式 初步了解 首先让我们通过一段代码来认识一下浮点型和整型的区别: int main() { ...
    99+
    2022-11-13
  • java内存管理与内存溢出异常的示例分析
    这篇文章主要介绍了java内存管理与内存溢出异常的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。说到内存管理,笔者这里想先比较一下java与C、C++之间的区别:在C...
    99+
    2023-05-31
    java
  • 详细谈谈JS中的内存与变量存储
    目录前言JS神奇的Number存储数字二进制如何转换why 0.1 + 0.2 !== 0.3?总结前言 在前端领域,因为大部分在跟UI打交道,内存管理是最容易被忽略的部分。...
    99+
    2022-11-12
  • JVM中内存区域与内存溢出的示例分析
    小编给大家分享一下JVM中内存区域与内存溢出的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java内存区域与内存溢出异常运行时数据区域程序计数器当前线程...
    99+
    2023-06-17
  • C语言中关于动态内存分配的详解
    目录一、malloc 与free函数二、calloc三、realloc四、常见的动态内存的错误【C语言】动态内存分配 本期,我们将讲解malloc、calloc、realloc以及f...
    99+
    2022-11-12
  • Java中内存分配的原理分析
    Java中内存分配的原理分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。深入Java核心Java内存分配原理精讲Java内存分配与管理是Java的核心技术之一,之前我们曾...
    99+
    2023-06-17
  • JS中内存与变量存储的示例分析
    这篇文章将为大家详细讲解有关JS中内存与变量存储的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。JS神奇的Number案例一:金额的计算与传递18.9 * 100=1889.9...
    99+
    2023-06-20
  • 关于C语言中数据在内存中的存储详解
    目录前言一、数据类型介绍1.类型的基本归类1.整形家族2.浮点型家族3.构造类型4.指针类型5.空类型二、整型在内存中的存储1.原码、反码、补码2.内存中怎样存储3.大小端字节序1....
    99+
    2022-11-12
  • C语言详细分析结构体的内存对齐
    目录一.结构体二.结构体内存对齐1.非嵌套结构体的大小2.含嵌套结构体的大小三.为什么要内存对齐1.平台原因(移植原因)2.性能原因一.结构体 结构体 (struct)是一种数据结构...
    99+
    2022-11-13
  • Java内存分析利器MAT的使用详解
    本篇内容主要讲解“Java内存分析利器MAT的使用详解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java内存分析利器MAT的使用详解”吧!dump文件包含的内容:1,全部的对象:类,域,原生...
    99+
    2023-06-17
  • JAVA虚拟机(JVM)详细讲解(二)——内存的划分
    我们知道,在C++语言里,如果想使用一个对象,需要对其进行new操作;如果不用这个对象了,需要对其进行delete操作。一旦开发人员忘记写delete语句了,就会造成内存泄露。【内存被对象占用着不还,就叫内存泄露。】而java就聪明了,它从...
    99+
    2020-08-19
    java教程 JVM
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作