栈内存 堆内存

基础类型,对象引用(堆内存地址)

由new创建的对象和数组,

存取速度快

相对于栈内存较慢

数据大小声明周期必须确定

分配的内存由Java虚拟机自动垃圾回收器管理。动态分配内存大小

共享特性

栈中如果有字符串,则直接引用

如果没有,开辟新的空间存入值

每new一次在堆内存中生成一个新的对象。

创建之后值可以改变

String类声明后则不可改变

一、栈内存

基础类型int, short, long, byte, float, double, boolean, char和对象引用

栈的共享特性

String str1 = "abc";

String str2 = "abc";

System.out.println(str1==str2); //true

int a=100;

int b=100;

1、编译器先处理String str1 = "abc";它会在栈中创建一个变量为str1的引用,然后查找栈中是否有abc这个值,如果没找到,就将abc存放进来,然后将str1指向abc。

2、   接着处理String str2 = "abc";在创建完b的引用变量后,因为在栈中已经有abc这个值,便将str2直接指向abc。这样,就出现了str1与str2同时均指向abc的情况。

二、堆内存

new、newarray、anewarray和multianewarray等指令建立

要注意: 我们在使用诸如String str = "abc";的格式定义类时,总是想当然地认为,创建了String类的对象str。担心陷阱!对象可能并没有被创建!而可能只是指向一个先前已经创建的 对象。只有通过new()方法才能保证每次都创建一个新的对象。 由于String类的immutable性质,当String变量需要经常变换其值时,应该考虑使用StringBuffer类,以提高程序效率。

Linux如何在栈上分配内存,Java堆与栈内存分配及String小记相关推荐

  1. java面试 内存中堆和栈的区别

    java中的内存,分为两种,一为堆内存,二为栈内存. 栈内存 在函数中定义的基本类型的变量和对象的引用变量都是在函数的栈内存中分配. 当在一段代码块中声明了一个变量时,java就会在栈内存中为这个变量 ...

  2. 史上最全java堆,将知识点掰碎了给你嚼,还不信学不会。

    目录 一.开局一张图 二.堆的核心概述(注意"可能"."几乎"这几个关键字,后面会谈到) 举例 三.堆的内存细分结构 1.现在垃圾收集器大部分都基于分代收集理论 ...

  3. Java:堆和栈的区别

    文章目录 前言 一.Java堆栈常见问题 二.问题理解 1.为什么要区分堆和栈 静态分配 动态分配 Java中的堆 2.堆和栈的区别 3.为什么堆是线程共享的而栈不是? 4.我们平时说的堆栈信息.堆栈 ...

  4. Java堆和栈的基本理解

    Java 堆和栈的区别 参考背景: 堆内存:用来存放由new创建的对象和数组: 栈内存:存放基本类型的变量,对象的引用变量: 堆存放的原因:由于在堆中创建对象(或数组)后,可在栈中定义一个特殊变量,让 ...

  5. 【转载】关于Java堆和栈的解释,收藏下来以后学习

    在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配. 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配 ...

  6. java堆和栈的区别_JAVA中堆和栈的区别

    在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配. 当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配 ...

  7. 数据结构和内存中堆和栈的区别

    特别声明:本文参考了博客:http://blog.csdn.net/wolenski/article/details/7951961#comments 堆和栈在 我的眼里一直是很模糊的概念,只是简单的 ...

  8. java 堆和栈 数据结构_数据结构的栈和堆和程序中的堆和栈

    在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到.但对于很多的初学着来说,堆栈是一个很模糊的概念.堆栈:一种数据结构.一个在程序运行时用于存放的地方,这可能是很多初学者的认识 ...

  9. Java堆和栈的区别/联系详解

    Java堆和栈的区别/联系详解 关于Java中堆栈内存的知识,算是基础知识,和C语言中的指针有一些类似,面试中也经常会被问到,特别是跟Java和C都有关的开发工作. 一.堆栈的联系 在Java中,内存 ...

最新文章

  1. deeplearning模型量化实战
  2. 技术图文:如何利用C# 实现 Kruskal 最小生成树算法?
  3. tf.metrics.accuracy
  4. js的apply方法使用详解,绝对NB
  5. 再谈网游同步技术:实时动作游戏同步方式和传输协议选择
  6. Vue源码分析系列四:Virtual DOM
  7. [Codeforces700E Cool Slogans]
  8. 解决ArcGIS 9.3卸载时出现invalid install.log file的方法
  9. 第十六:Allure-pytest功能特性介绍
  10. DRP:基本环境安装中遇到那些事儿
  11. “ this”关键字如何工作?
  12. Linux用户的福音,记忆力解放!快速调用复杂命令...
  13. c语言程序设计教程 郭浩志,C语言程序设计教程答案杨路明郭浩志.doc
  14. MyEclipse暗黑主题设置
  15. Myshare.cc 图床对接ShareX自定义图片上传
  16. 解决EZP_XPro无法烧录
  17. 计算机平面设计中汉字的使用艺术
  18. MAXENT模型生物多样性
  19. base64编码类------原始码(C#)
  20. html .ani文件,ANI文件格式 | 学步园

热门文章

  1. SAP Commerce Cloud WCMS 里的 home 页面和 SAP Spartacus Page API 返回的数据比较
  2. ABAP function module 的使用
  3. 使用Angular的property binding给HTML DOM元素的class动态赋值
  4. Angular DefaultDomRenderer2.setProperty - HTML的值是如何从Angular Component flow过来的,以及跨平台支持
  5. 如何处理Angular应用的错误消息: No pipe found with name async
  6. SAP Analytics Cloud里的Smart Insight功能介绍
  7. 如何启用SAP Business by design里的Correction Invoice功能
  8. click F5 refresh button on detail page - how to get the usable OData model
  9. SAP CRM 中间件对物料batch ID的处理
  10. Angular:why click add button does not work for the second time