解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。

2023-05-16

答:通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间;而通过new关键字和构造器创建的对象放在堆空间;程序中的字面量(literal)如直接书写的100、”hello”和常量都是放在静态区中。栈空间操作起来最快但是栈很小,通常大量的对象都是放在堆空间,理论上整个内存没有被其他进程使用的空间甚至硬盘上的虚拟内存都可以被当成堆空间来使用。

1
String str = new String( "hello" );

上面的语句中变量str放在栈上,用new创建出来的字符串对象放在堆上,而”hello”这个字面量放在静态区。

补充:较新版本的Java(从Java 6的某个更新开始)中使用了一项叫”逃逸分析”的技术,可以将一些局部对象放在栈上以提升对象的操作性能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。 的相关文章

  • Android 堆栈大小

    我如何获取和更改 Android 应用程序的堆栈大小 即使是主线程 主线程堆栈大小是在固件中设置的 无法修改 除非修改您自己手机的固件 正如斯特朗先生指出的那样 对于您分叉的线程 您可以设置自己的堆栈大小
  • 编译时在代码中替换Java静态最终值?

    在java中 假设我有以下内容 fileA java class A public static final int SIZE 100 然后在另一个文件中我使用这个值 fileB java import A class b Object t
  • Sails js 路由静态 html

    我想在我的 sails js 应用程序中完全分离客户端和服务器端 如果我删除 路由 它将自动从 assets 文件夹中提供一个名为index html的文件 我想从资产文件夹中提供另一个文件 我该怎么做 如果你看看 sails 使用的中间件
  • C++11 函数局部静态 const 对象的线程安全初始化

    这个问题已在 C 98 上下文中提出 并在该上下文中得到回答 但没有明确说明有关 C 11 的内容 const some type create const thingy lock my lock some mutex static con
  • 如何选择面积最大的对象?

    我用过bwconvhull检测图像的某个部分 正如您在图像中看到的那样 有许多具有特定质心的对象 我想做的是检测面积最大的物体 左起第一个大物体 并忽略其他物体 我应该遵循哪种方法 我将非常感谢您的帮助 以下是代码 由于我仍在努力 所以写得
  • 从 BroadcastReceiver 获取方法来更新 UI

    我正在尝试根据变量的变化更新用户界面BroadcastReceiver 因此 我需要调用一个扩展类的方法 以获取我提到的变量 BroadcastReceiver in MainActivity取决于但我无法以任何方式获得真正的返回值 扩展的
  • 我应该为每个 Web 请求使用静态缓存的 ResourceManager 还是一个新实例?有关系吗?

    创建新的 NET 对性能 或其他 有何影响 如果有 ResourceManager根据每个请求new ResourceManger myResourceType FullName myResourceType Assembly 与在 Des
  • java银行程序帐户ID不上去?

    每次创建银行帐户时 帐户 ID 都应增加 1 但每次我尝试提取 Id 时 我只会得到帐户 ID 为 0 任何建议 因为我完全按照我学习的书中的方式进行操作而且它仍然没有更新 帐户构造函数 public class BankAccount p
  • 但是创建静态实用方法不应该被过度使用吗?如何避免呢? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 随着时间的推移 java项目中引入了许多实用方法来完成更复杂和简单的任务 当使用静态方法时 我们在代码中引入了紧密耦合 这使得我们的代
  • 为什么java(>=7版本)不支持运行没有main方法的程序? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 class WithoutMain static System out println Without main class Sy
  • 如何初始化一个大多数值相同但某些值不同的静态数组?

    我想使用静态或常量数组 但使用除 T N 句法 我需要定义特定元素 但所有其他值都可以默认为 0 或其他值 在 C 中 您可以执行以下操作 byte ARRAY 256 0x1F 1 lt lt 4 Or even simply just
  • Java加减法与金钱

    我正在尝试对美元和美分进行加法和减法 但在超过 100 美分和低于 0 美分时遇到困难 我的代码可以很好地添加任何内容 直到我需要将 100 美分转换为 1 美元 我无法将我的话转化为代码 但我知道需要做什么才能将美分转换成美元 仅供参考
  • 在 Android 中将应用程序上下文保存到静态变量是否安全?

    我知道在 Android 上使用静态变量是相当危险的 特别是当您将它们引用到活动时 但是 如果我有一个扩展 Application 的类 我们称此类为 App 引用此类的实例是否安全 如果是这样 任何其他类对应用程序上下文进行任何类型的引用
  • 最终类中的静态函数是否隐式最终?

    我的问题基本上与this https stackoverflow com q 8766476 3882565一 但这是否也适用于static功能 我想了解 编译器是否处理所有static函数在一个final类为final 是否添加final
  • C++中全局变量和静态成员变量动态初始化的实现

    我有一些关于执行C 中关于链接和可执行模块加载过程的变量初始化 我主要关心的是全局变量和静态成员变量的动态初始化 其中初始化过程涉及代码的执行 我正在寻找解决 Windows 和 Linux 问题的答案 我已经明白在静态初始化的情况下 编译
  • 使用未命名命名空间而不是静态命名空间

    我可以假设在未命名命名空间中声明的对象相当于static namespace int x 1 static int x 2 FWIK 在这两种情况下 x将具有静态存储期限和内部链接 声明为的对象的所有规则也是如此static适用于未命名名称
  • 设置惰性静态变量首先初始化然后分配?

    我意识到static变量是隐式的lazy 这真的很棒 执行以下操作在第一次调用之前不会创建实例 static var test Test 但是 将一个新实例分配给static变量初始化原始实例 然后分配新实例 这对我来说很麻烦 SomeTy
  • 非静态类中的静态方法有什么意义?

    我无法理解以下代码的潜在错误 class myClass public void print string mess Console WriteLine mess class myOtherClass public static void
  • C#:为派生类继承单独的静态成员

    我的问题简述 class A Other stuff in my class protected static staticMember class B A Other stuff in my class Will have A stati
  • 非静态类中的静态方法和静态类中的静态方法有什么区别?

    我有两个班级A级和B级 static class ClassA static string SomeMethod return I am a Static Method class ClassB static string SomeMeth

随机推荐

  • 服务器配置ssh(centos7)

    服务器配置 centos7 span class hljs title vim etc ssh sshd config span span class hljs comment br 禁用root账户登录 xff0c 如果是用root用户登
  • 面试题集锦-Spring/SpringMVC

    Spring SpringMVC 1 为什么要使用 spring xff1f 2 解释一下什么是 aop xff1f 3 解释一下什么是 ioc xff1f 4 spring 有哪些主要模块 xff1f 5 spring 常用的注入方式有哪
  • 面试题集锦-SpringBoot

    spring boot 1 什么是 spring boot xff1f 2 为什么要用 spring boot xff1f 3 spring boot 核心配置文件是什么 xff1f 4 spring boot 配置文件有哪几种类型 xff
  • 面试题集锦-hibernate

    hibernate 1 什么是 ORM 框架 xff1f 2 为什么要使用 hibernate xff1f 3 hibernate 中如何在控制台查看打印的 SQL 语句 xff1f 4 hibernate 有几种查询方式 xff1f 5
  • 面试题集锦- spring cloud

    spring cloud 1 什么是 spring cloud xff1f 2 spring cloud 断路器的作用是什么 xff1f 3 spring cloud 的核心组件有哪些 xff1f 1 什么是 spring cloud xf
  • 面试题集锦-Mybatis

    Mybatis 1 MyBatis 中 和 的区别是什么 xff1f 2 MyBatis 有几种分页方式 xff1f 3 RowBounds 是一次性查询全部结果吗 xff1f 为什么 xff1f 4 MyBatis 逻辑分页和物理分页的区
  • 面试题集锦-RabbitMQ

    RabbitMQ 1 RabbitMQ 的使用场景有哪些 xff1f 2 RabbitMQ 有哪些重要的角色 xff1f 3 RabbitMQ 有哪些重要的组件 xff1f 4 RabbitMQ 中 vhost 的作用是什么 xff1f 5
  • 面试题集锦-kafka

    kafka 1 kafka 可以脱离 zookeeper 单独使用吗 xff1f 为什么 xff1f 2 kafka 有几种数据保留的策略 xff1f 3 kafka 同时设置了 7 天和 10G 清除数据 xff0c 到第五天的时候消息达
  • 面试题集锦-Zookeeper

    Zookeeper 1 zookeeper 是什么 xff1f 2 zookeeper 都有哪些功能 xff1f 3 zookeeper 有几种部署模式 xff1f 4 zookeeper 怎么保证主从节点的状态同步 xff1f 5 集群中
  • 面试题集锦-MySQL

    MySQL 模式主备切换方式方式 主从概述原理主节点从节点 方式 读写分离分库分表索引页页目录目录页B 43 树聚簇索引和非聚簇索引为什么InnoDB只有一个聚簇索引 xff0c 而不将所有索引都使用聚簇索引 xff1f 联合索引的最左前缀
  • 面试题集锦-Redis

    Redis 1 Redis 是什么 xff1f 都有哪些使用场景 xff1f 2 Redis 和 memcache 有什么区别 xff1f 3 Redis 为什么是单线程的 xff1f 4 什么是缓存穿透 xff1f 怎么解决 xff1f
  • Ubuntu18.04 qt5.14安装

    1 下载qt5 14 2 链接Index of archive qt 2 安装 打开终端 xff0c 进入安装包目录 xff0c 给安装包rwx权限 chmod 777 qt opensource linux x64 5 14 2 run
  • 面试题集锦-JVM

    JVM 1 说一下 JVM 的主要组成部分 xff1f 及其作用 xff1f 2 说一下 JVM 运行时数据区 xff1f 3 说一下堆栈的区别 xff1f 4 队列和栈是什么 xff1f 有什么区别 xff1f 5 什么是双亲委派模型 x
  • eclipse快捷键

    ctrl 43 t 查看接口实现类 ctrl 43 shif 43 t 快速查找某个类 包括jar中类 ctrl 43 shift 43 r 快速查找工作空间中项目的类
  • short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?

    答 xff1a 对于short s1 61 1 s1 61 s1 43 1 由于1是int类型 xff0c 因此s1 43 1运算结果也是int 型 xff0c 需要强制转换类型才能赋值给short型 而short s1 61 1 s1 4
  • int和Integer有什么区别

    答 xff1a Java是一个近乎纯洁的面向对象编程语言 xff0c 但是为了编程的方便还是引入了基本数据类型 xff0c 但是为了能够将这些基本数据类型当成对象操作 xff0c Java为每一个基本数据类型都引入了对应的包装类型 xff0
  • Java 中 Equals和==的区别

    在谈论equals和 61 61 的区别前 xff0c 我们先简单介绍一下JVM中内存分配的问题 在JVM中 内存分为栈内存和堆内存 二者有什么区别呢 xff1f 当我们创建一个对象 xff08 new Object xff09 时 xff
  • 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

    答 xff1a 是值传递 Java语言的方法调用只支持参数的值传递 当一个对象实例作为一个参数被传递到方法中时 xff0c 参数的值就是对该对象的引用 对象的属性可以在被调用过程中被改变 xff0c 但对对象引用的改变是不会影响到调用者的
  • 什么情况下用+运算符进行字符串连接比调用StringBuilder对象的append方法连接字符串性能更好?

    经常在网上看到或者在周围听到有人说字符串拼接不要直接用 String 相加 xff0c StringBuilder 的效率要比 String 直接相加拼接要高 还有人常说 xff0c StringBuffer 是同步的 xff08 线程安全
  • 解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。

    答 xff1a 通常我们定义一个基本数据类型的变量 xff0c 一个对象的引用 xff0c 还有就是函数调用的现场保存都使用内存中的栈空间 xff1b 而通过new关键字和构造器创建的对象放在堆空间 xff1b 程序中的字面量 xff08