程序执行的内存分析过程:

虚拟机栈(简称:栈)的特点如下:

1. 栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法出口等)。

2. JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等)

3. 栈属于线程私有,不能实现线程间共享!

4. 栈的存储特性是“先进后出,后进先出”

5. 栈是由系统自动分配,速度快!栈是一个连续的内存空间

堆的特点如下:

1. 堆用于存储创建好的对象和数组(数组也是对象)

2. JVM只有一个堆,被所有线程共享

3. 堆是一个不连续的内存空间,分配灵活,速度慢!

方法区(又叫静态区,也是堆)特点如下:

1. 方法区是JAVA虚拟机规范,可以有不同的实现

2. JVM只有一个方法区,被所有线程共享

3. 方法区实际也是堆,只是用于存储类、常量相关的信息

用来存放程序中永远不变或唯一的内容(类信息、静态变量、字符串常量等)


垃圾回收机制(Garbage Collection):

Java引入了垃圾回收机制,令C++程序员最头疼的内存管理问题迎刃而解。Java程序员可以将更多的精力放到业务逻辑上而不是内存管理工作上,大大的提高了开发效率。

内存管理:

Java的内存管理很大程度指的就是:堆中对象的管理,其中包括对象空间的分配和释放。

对象空间的分配:使用new关键字创建对象即可。

对象空间的释放:将对象赋值null即可,垃圾回收器将负责回收所有“不可达”对象的内存空间。

垃圾回收过程:

任何一种垃圾回收算法一般要做两件基本事情:

1. 发现无用的对象

2. 回收无用对象占用的内存空间

垃圾回收机制保证可以将“无用的对象”进行回收。无用的对象指的就是没有任何变量引用该对象。Java的垃圾回收器通过相关算法发现无用对象,并进行清除和整理。

垃圾回收相关算法:

1. 引用计数法

堆中的每个对象都对应一个引用计数器,当有引用指向这个对象时,引用计数器加1,而当指向该对象的引用失效时(引用变为null),引用计数器减1,最后如果该对象的引用计算器的值为0时,则Java垃圾回收器会认为该对象是无用对象并对其进行回收。优点是算法简单,缺点是“循环引用的无用对象”无法识别。

2. 引用可达法(根搜索法)

程序把所有的引用关系看作一张图,从一个节点GC ROOT开始,寻找对应的引用节点,找到这个节点以后,继续寻找这个节点的引用节点,当所有的引用节点寻找完毕之后,剩余的节点则被认为是没有被引用到的节点,即无用的节点。

java 堆_JAVA学习笔记 07——堆、栈和垃圾回收机制相关推荐

  1. Cocos2dx学习笔记(1) Ref类型数据 垃圾回收机制

    1.不调用autorelease()的情况 TestVO* vo = new TestVO();//未调用create()方法创建,没有执行过autorelease()vo->init();// ...

  2. Java面向对象(七)包、内部类、垃圾回收机制

    一.包 package 包名:  ---- 声明包    注意: 一个java文件中只能有一句package语句 ,  并且必须放在java文件首行 . import 包名: --- 导包 impor ...

  3. java 全局变量 内存不回收_JAVA知识梳理:内存管理与垃圾回收机制

    相对于C,C++来说,java程序员最幸运的事就是不用进行内存控制,很少会出现内存溢出的异常.但是这也不是绝对的,当出现oom的时候,如果不了解虚拟机是如何使用内存的,排查错误将会成为一项艰难的任务. ...

  4. JVM学习笔记(二):垃圾回收、垃圾回收算法、垃圾回收器(Serial、Parallel、CMC、G1)、内存分配原则实战

    垃圾回收 一.判断对象是否可以被回收 1.引用计数计数法 内容:在对象中添加一个引用计数器,每当有一个地方引用它,计数器就加一:当引用失效时,计数器就减一:任何时刻计数器为零的对象都是不可能在被使用的 ...

  5. JVM学习笔记之四:分代垃圾回收

    2019独角兽企业重金招聘Python工程师标准>>> 如图所示,在HotSpot虚拟机中共划分有三个代:年轻代(young generation),年老代(old generati ...

  6. 原型模式 java 深浅_java学习笔记之原型模式及深浅拷贝

    一.原型模式的基本介绍 在聊原型模式之前,我们来思考一个小问题,传统的方式我们是如何克隆对象呢? 那我们以多利羊(Sheep)为例,来说明上述这个问题,具体代码见下面: 多利羊(Sheep) publ ...

  7. 【Python】学习笔记总结5(Python垃圾回收及内存优化)

    文章目录 五.Python垃圾回收 1.引用计数(主) 2.GC负责的主要任务 3.标记-清除 4.引用计数不能回收的案例分析 5.分代收集 6.GC的阈值 7.GC垃圾回收自动触发机制 7.内存优化 ...

  8. [Javascript 高级程序设计]学习心得记录2 Javascript的垃圾回收机制

    Javascript 是自动垃圾收集机制,不需要像c/c++的开发人员一样担心内存泄漏问题.这种垃圾收集机制通过找出那些不再使用的变量,释放其占用的内存从而达到垃圾回收的效果.而如何如何找出那些不再使 ...

  9. java中的年轻态,14、Java垃圾回收机制(示例代码)

    垃圾回收原理和算法 ??Java引入了垃圾回收机制,令C++程序员最头疼的内存管理问题迎刃而解.Java程序员可以将更多的精力放到业务逻辑上面,而不是内存管量上面,大大的提高了开发效率.这是因为Jav ...

最新文章

  1. 树莓派装linux ros,树莓派安装Ubuntu16.04 MATE系统以及ROS(kinetic)的安装
  2. SCCM部署操作系统失败:MP has rejected a request
  3. 【成长点滴】对SMART原则的一些粗浅理解
  4. Problem Collection II 构造
  5. 6-2 多项式求值 (15 分)
  6. Bootstrap 重置样式
  7. 【网络流24题】 No.3 最小路径覆盖问题 (网络流|匈牙利算法 -最大二分匹配)...
  8. 蓝色起源起诉NASA,不服其将月球着陆器合同授予SpaceX
  9. C/C++ 异常( std::exception)
  10. Tomcat6.0 管理器配置
  11. Makefile中的@
  12. 计算机数制转换操作方法,计算机数制转换新方法
  13. T00ls - Metasploit 教程 笔记
  14. mysql对韵母分组,基于MySQL的中文发音查询的元级实现
  15. DELLEMC VxRail POC 注意点
  16. 分布式全站爬虫——以搜狗电视剧为例
  17. 辨别虚假高音质(320k/Ape/Flac)的音乐文件
  18. DayDayUp:计算机技术与软件专业技术资格证书之《系统集成项目管理工程师》证书考试历年真题及其解析之2017年/2018年
  19. C语言数据类型及运算符
  20. AntDesign蚂蚁金服web3.9原型组件|Axure原型组件

热门文章

  1. MySQL 中日志的面试题总结
  2. 面试珍藏:最常见的200多道Java面试题(2019年最新版)
  3. 2017年AR大会上海站干货分享
  4. Xamarin开发笔记—设备类amp;第三方弹窗的使用和注意事项
  5. NPM使用前设置和升级
  6. MongoDB Query 的几个方法
  7. C#中泛型类型约束条件
  8. C++PrimerPlus学习——第十七章编程练习
  9. solaris php,针对 Solaris 的安装提示
  10. java远程插件动态注册机制_Spring运行时动态注册bean的方法