JAVA中for与while关于内存的细节问题
文/朱季谦
JAVA的程序结构有顺序结构,循环结构,分支结构,以及跳转结构,而循环结构里经常用到的无外乎有以下几种:for循环,while循环,以及do-while循环。本文主要讨论for循环与while循环的区别,其实,两者在日常编程过程里,都是可以互换的,唯一有区别的在于格式上,若需要通过变量来进行循环控制,而用到的变量只作为循环增量存在时,两者就会在内存上出现了差异。
在用while来做循环时,需要用到变量进行循环控制时,往往会定义一个成员变量,例如截图里的i,它的值会存在堆内存里,会随着类的存在而一直存在,即使循环结束了,也不会自动释放,只有当类结束了才会消失,换言之,即会占用内存。

而用for循环时,若需用到变量进行循环控制时,往往会定义一个局部变量,类似以下截图所示:

这里的变量j属于局部变量,定义的值存放在栈内存里,当循环结束后,它会自动释放j的值,即不会继续占用空间。
由此可知,for循环与while循环虽然两者都可以互换,但在细节方面上,其实还存在是否占用内存的问题,相对于while,for在需用到变量进行循环控制时,for比较少占用空间。关于空间占用问题,其实也需要关注才行,毕竟涉及到程序优化问题。
JAVA中for与while关于内存的细节问题的更多相关文章
- 【java虚拟机序列】java中的垃圾回收与内存分配策略
在[java虚拟机系列]java虚拟机系列之JVM总述中我们已经详细讲解过java中的内存模型,了解了关于JVM中内存管理的基本知识,接下来本博客将带领大家了解java中的垃圾回收与内存分配策略. 垃 ...
- java中的各种数据类型在内存中存储的方式
原文地址:http://blog.csdn.net/aaa1117a8w5s6d/article/details/8251456 1.Java是如何管理内存的 java的内存管理就是对象的分配和释放问 ...
- Java中的垃圾回收机制&内存管理&内存泄漏
1. Java在创建对象时,会自动分配内存,并当该对象引用不存在的时候,释放这块内存. 为什么呢? 因为Java中使用被称为垃圾收集器的技术来监视Java程序的运行,当对象不再使用时,就自动释放对象所 ...
- 面试官:小伙子,你给我说一下Java中什么情况会导致内存泄漏呢?
概念 内存泄露:指程序中动态分配内存给一些临时对象,但对象不会被GC回收,它始终占用内存,被分配的对象可达但已无用.即无用对象持续占有内存或无用对象的内存得不到及时释放,从而造成的内存空间浪费. 可达 ...
- 【Java基本功】一文了解Java中继承、封装、多态的细节
本节主要介绍Java面向对象三大特性:继承 封装 多态,以及其中的原理. 本文会结合虚拟机对引用和对象的不同处理来介绍三大特性的原理. 继承 Java中的继承只能单继承,但是可以通过内部类继承其他类来 ...
- 【转载】Java中如何写一段内存泄露的程序 & ThreadLocal 介绍和使用
可以参考这段文章: link A1:通过以下步骤可以很容易产生内存泄露(程序代码不能访问到某些对象,但是它们仍然保存在内存中): 上文中提到了使用ThreadLocal造成了内存泄露,但是写的不清不楚 ...
- Java中锁的实现与内存语义
目录 1. 概述 2. 锁的内存语义 3. 锁内存语义的实现 4. 总结 1. 概述 锁在实际使用时只是明白锁限制了并发访问, 但是锁是如何实现并发访问的, 同学们可能不太清楚, 下面这篇文章就来揭开 ...
- java中类加载的全过程及内存图分析
类加载机制: jvm把class文件加载到内存,并对数据进行校验.解析和初始化,最终形成jvm可以直接使用的java类型的过程. (1)加载 将class文件字节码内容加载到内存中,并将这些静态数据转 ...
- Java中对象创建时的内存分配
一.前言知识铺垫 1.逃逸对象:在一个方法内创建的对象没有被外界引用则称该对象为未逃逸的对象. 2.JDK1.6以后的HotSpot虚拟机支持运行时的对象逃逸分析. 3.JVM中的参数配置: 1) ...
随机推荐
- Windows系统IntelliJ IDEA安装配置
IntelliJ IDEA安装 IntelliJ IDEA,是java编程语言开发的集成环境,业界公认的最好的Java开发IDE之一.打开IDEA官方网站https://www.jetbrains.c ...
- python中matplotlib画图
参考 https://blog.csdn.net/u010358304/article/details/78906768 https://www.cnblogs.com/onemorepoint/p/ ...
- 正则序RegExp
正则的理解 1.正则的懒惰性 每次在exec()中捕获的时候,只捕获第一次匹配的内容,而不往下不捕获了.我们把这叫正则的懒惰性,每一次捕获的开始位置都是从0开始 解决正则的懒惰性 修饰符g 正则 ...
- SQL - 1.区分login、user、schema和role
Login Login 是Server一级的概念,表示登录Server的凭证,比如在Server_A上有一个数据库DA,那么想要访问数据库DA,第一步要做的事情就是先登录到Hosting该数据 ...
- 壁虎书3 Classification
MNIST fetch_openml returns the unsorted MNIST dataset, whereas fetch_mldata() returned the dataset s ...
- OO第二次博客作业--第二单元总结
第一次作业 1. 设计策略 第一次作业,一共三个线程,主线程.输入线程和电梯线程,有一个共享对象--调度器(队列). 调度的策略大多集中到了电梯里,调度器反而只剩下一个队列. 2. 基于度量的分析 类 ...
- Linux基础命令1
文件的操作: Tab键:自动补齐 反斜杠‘\’:强制换行 Ctrl+u:清空至行首 Ctrl+k:清空至行尾 Ctrl+l:清屏 --clear 清屏 Ctrl+c:取消本次命令编辑,中断当前操作 ...
- 2016(5)系统设计,web应用
试题五(共25分) 阅读以下关于Web应用的叙述,在答题纸上回答问题1至问题3. 某软件企业拟开发一套基于Web的云平台配置管理与监控系统,该系统按租户视图.系统管理视图以及业务视图划分为多个相应的W ...
- tp5命令行
手册->命令行->自定义命令行 1.第一步,配置command.php文件 2.第二步,建立命令类文件 注意:该文件中代码,从文档中粘,以防写错. 名字啥的都不用改,就改命名空间 和 定义 ...
- 2019-oo-第二次总结
这一单元是关于模拟电梯运行,考验多线程的一个单元,难度由简入入深,从多线程单部电梯,到优化,再到多线程多部电梯,难度一次次的提高. 一.多线程单部电梯(傻瓜调度) 1.设计策略 这一次我只额外的开了一 ...