Java内存主要分为stack, heap, data segment, and code segment.

stack(栈):存放非静态基本数据类型变量的名称和值,以及非静态对象的引用

若是非静态基本数据类型变量,则变量的名称和值一起被存入stack(栈)中,变量的名称指向变量的值,比如int a=1; 并且此时变量的值具有共享性,即如果有具有相同值另一个变量压入栈中比如int b=1;,则该变量指向那个相同的值,也就是说这个值"1"被共享了,内存空间节省了。如果变量b的值被改变了比如int b=2; 则b将会指向即将被压入栈的“2”.

存储非静态对象的引用(相当于指针)比如String s1="abc"; String s2=new String("abc"); int[] intArray1=new int[3]; File[] fileArray=new File[10]; String[][] s3=new String[2][2]; 等 s1, s2, intArray1, fileArray, s3将会被存入栈中。

heap(堆):存放new产生的对象,比如上面代码的new String(), File[0], File[1], ... int[0], int[1], ... String[0][0], String[0][1], String[1][0], ...等

data segment里面又分为 静态域 和 常量池(constant pond or constant pool):

静态域 存放静态基本数据类型变量的名称和值,以及静态对象的引用比如static String port="5557"; 此时port将会被存入data segment中的静态域。

常量池用于静态或非静态对象所使用的值。比如String s1="abc"; String s2=new String("abc"); static String port="5557"中的"abc", "5557". 但是前一个"abc"直接被栈s1指向;后一个"abc"被heap中的对象new String()所指,然后该对象又被栈s2指向。就是说常量池中的数据也被共享(里面只有一个"abc"),如果再 String s3=new String("abc");则栈中存引用s3,heap中又用一块内存存入对象new

String(),然后该new String()指向"abc";如果再String s4="abc";则栈中存引用s4,直接指向常量池的同一"abc",即"abc"一直被重复利用着。但我们从中可以清楚的看到在if语句中(s1==s4)为真,但是(s2==s3)为假,正是因为此时比较的是变量本身存储的值(即所指的东西被存储的地址)。而(s1.equal(s2), s1.equal(s3), s1.equal(s4), s2.equal(s4), ...)都为真,因为equal比较的是最终的常量值。

code segment 当然是存储所有的像String s1="abc"; String s2=new String("abc"); int[] intArray1=new int[3]; File[] fileArray=new File[10]; String[][] s3=new String[2][2]; 等这样的代码。

由于对象所占的内存容易改变,比如ArrayList对象中数组的长度是可以动态改变的,所以Java对heap采用动态存储,即首先在编译运行之前就分配一个最小的内存值作为JVM启动内存,并且同时指定一个最大heap内存,以及当实际内存超过当前分配heap内存比如80%时自动拓展分配的heap内存,反之当小于30%时自动缩减分配的heap内存。而上面的所有值都是用户可以自己设定的。对象的资源收回由GC Java垃圾自动回收机制(Garbage Collector)管理。由于GC Java垃圾自动回收机制只回收那些超出对象作用域范围或被置为null的对象。注意Java垃圾自动回收机制只管理被new构建出来的对象!!所以对刚被定义的比如String

ss=null; 这个ss不会被撤销。由于GC在一个单独的线程中运行,其回收对象的时间是不确定的,被废弃的对象不一定马上被回收,所以这也是Java程序通常会比较占内存的一个原因。对于其他内存存储区域比如stack,data segment等都是静态管理,即变量超出作用域时其内存立即被收回然后可以让给其他新的变量。

java内存管理课程设计_Java内存管理分析相关推荐

  1. java车辆管理系统课程设计_车辆管理信息系统--Java课程设计.doc

    车辆管理信息系统--Java课程设计 合肥学院 计算机科学与技术系 课程设计任务书 2011-2012学年第一学期 课程JAVA语言课程设计课程设计名称车辆管理信息系统专业班级指导教师 2011年9月 ...

  2. java打字训练课程设计_Java打字训练课程设计

    Java打字训练课程设计 软 件 学 院课程设计报告书课程名称 设计题目 专业班级 学 号 姓 名 指导教师 年 月目录1 设计时间 12 设计目的 13 设计任务 14 设计内容 14.1 需求分析 ...

  3. java模拟时钟课程设计_java课程设计-时钟图形模拟

    java课程设计-时钟图形模拟 计算机与信息工程系 <高级语言程序设计>课程设计报告课 程 设 计 任 务 书专 业 通信工程 班 级 13 级四班 姓 名 张凯铭设 计 起 止 日 期设 ...

  4. java蜘蛛纸牌课程设计_Java课程设计-蜘蛛纸牌游戏.doc

    Java课程设计-蜘蛛纸牌游戏.doc 还剩 33页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: Java 课 ...

  5. java简单计算器课程设计_java仿windows简易计算器课程设计 源码+报告

    [实例简介] java仿windows简易计算器课程设计 源码+报告 课直接运行. [实例截图] [核心代码] Java课设-简易计算器 └── Java课设-简易计算器 ├── Java课程设计.d ...

  6. java打字游戏课程设计_Java课程设计打字游戏.docx

    中南大学 Java 课程设计报告 题 目 打字游戏 学生姓名 窦立阳 指导教师 陈丽萍 学 院 信息科学与工程学院 专业班级 计科 1204 完成时间 2015 年1月15日 目录 第二章 总体设计 ...

  7. java打字游戏课程设计_java课程设计打字游戏

    <java课程设计打字游戏>由会员分享,可在线阅读,更多相关<java课程设计打字游戏(32页珍藏版)>请在金锄头文库上搜索. 1.Java 课程设计 1各专业全套优秀毕业设计 ...

  8. java蜘蛛纸牌课程设计_Java课程设计——蜘蛛纸牌

    一.团队名称.团队成员介绍.任务分配 团队名称:Panta 团队成员介绍 网络1713蔡炜明[组长] 201721123076 网络1713高枫    [组员] 201721123090 任务分配 网 ...

  9. java读书网站课程设计_Java课程设计

    第1章  记忆测试系统 1.1  设计内容 1.2  设计要求 1.3  总体设计 1.4  具体设计 1.4.1  运行效果与程序发布 1.4.2  主类MemOry+ 1.4.3  方块B10ck ...

最新文章

  1. 城市大脑,是工程问题,但首先是基础科学问题
  2. 卡巴斯基工业基础设施专用网络安全解决方案
  3. python3 获取cpu 内存利用率
  4. 微软算法100题26 左旋转字符串
  5. python yolo-v2 设计批处理程序对训练生成的权重文件进行自动化批量测试,并输出结果到指定txt文件
  6. java guava 使用_java – 使用Guava从属性文件创建对象
  7. can硬件滤波 stm32cubemx_[转载]STM32的CAN滤波器设置
  8. POJ1212 HDU1650 UVA180 LA5240 Eeny Meeny【约瑟夫环】
  9. Ubuntu20.04配置mysql环境及远程连接
  10. Awvs 12.x安装教程及常见问题
  11. sip协议详解(三)
  12. Namenode服务挂
  13. 会议panel是什么意思中文_会议形式有哪些?
  14. python编程*三角形图形创意图片_使用python的pil制作微信九宫格图片
  15. 制作简单的视频壁纸程序,C语言可完成
  16. 小伙伴面试之成都创宇知道
  17. Ubuntu安装之,硬盘分区
  18. 苹果正式宣布4月20日举行春季活动,新的iPad,AirTags等许多新产品
  19. 双缓冲异步日志(Async Logging)
  20. origin中图片的正确输出方式

热门文章

  1. mysql 5.7 mts_mysql5.7 中启用MTS后error log中大量Note日志分析
  2. AUTOSAR从入门到精通100讲(五)-汽车LIN总线详解
  3. 高段位产品经理必须掌握的商业模式分析该怎么做?
  4. php中什么时候用传值,php中传值与传引用的区别。什么时候传值什么时候传引用?...
  5. php m pi 2,PHP学习(2)
  6. 箱式图 添加异常值平均值_什么是脏数据?怎样用箱形图分析异常值?终于有人讲明白了...
  7. Ajax应用查询员工信息
  8. (网页)swiper.js轮播图插件
  9. 浅谈HTML5中canvas中的beginPath()和closePath()的重要性
  10. js操作table中tr的顺序,实现上移下移一行的效果