生活规律告诉我们,在享受便利的同时一般都会付出巨大的代价,如果你在享受了便利的同时,还没有为此付出代价,不是说明没有,只是还没到付出的时候。试问,有哪个Java系统架构师不懂Java虚拟机?纵观Java程序员的发展历程,又有多少人是卡在了Java虚拟机之上。所以如果你还没有感觉到为此付出代价,说明你已经Java虚拟机的糖衣炮弹所击中,且被毒害之深。Java的自动内存管理就是这样,像毒药一样,一旦上瘾就很难戒掉,而且会沉迷于此。而正确的做法就是了解其原理,拿到尚方宝剑,当虚拟机不好好为你提供服务时,拿出宝剑,以便立刻制服他。而此尚方宝剑的锻造需要经历巨大磨难,唯以毅力坚定者方能铸成。

Java的内存管理主要两部分,一部分是Java的内存分配,另外一部分是内存的回收。对于这部分内容的了解,首先必须了解清楚Java虚拟机的内存结构。如果对内存结构不熟悉的朋友可以看关于《Java虚拟机的内存结构》这篇文章。我们知道内存可以分为5大块区域,从自动内存管理的角度,线程独占区的内存是比较容易进行管理的,线程创建就要分配这些区域,线程的销毁这些区域也就释放了,因此我们这里主要讨论的主要是关于堆内存和方法区内存的管理。在之前的文章中也提到了虚拟机规范中并没有对方法区这块内存做太多的限制,而且是作为堆内存的一个逻辑部分。下面就分别从内存的分配与内存的回收两个方面来了解Java虚拟机的内存管理。

内存分配,内存的分配相比较内存的回收要简单一些,一般有几个原则:

 1.对象首先在Eden区域分配。2.大对象直接进入到老年代。3.多次存活的对象分配到老年代中。4.内存分配担保。5.逃逸分析与栈上分配。

内存回收,这部分涉及的内容就比较多了,首先是内存回收所用到的算法,比如标记对象为垃圾对象的引用计数法以及可达性分析法。在比如垃圾收集算法标记清除算法,复制算法,标记整理算法以及分代收集算法等等。这些理论知识积累了之后就到垃圾收集器,垃圾收集器是执行垃圾回收的具体实现,垃圾收集器有很多,不同的垃圾收集器的适用场景不同,关注点也不同,在不同的环境下选择合适的垃圾收集器并指定合适的参数是一个系统架构师必备的能力。这样对于内存的回收就达到标准了。总结一下主要的内容

 0.垃圾对象判断算法1.垃圾回收算法2.垃圾收集器

好了,到这里关于java内存管理所需要知识点就都列到这里了,如果你对Java的自动内存管理比较感兴趣,可以观看《深入理解Java虚拟机》这套视频,这里详细的讲解了上面的所有的知识点。

Java虚拟机自动内存管理相关推荐

  1. 深入理解Java虚拟机 -- 自动内存管理

    文章目录 一.内存管理 1.1 区域划分 1.2 垃圾回收 1.3 垃圾回收算法 二.垃圾回收器 2.1 CMS 2.2 G1 2.3 Shenandoah[暂未用到] 2.4 ZGC[暂未用到] 三 ...

  2. java虚拟机的内存管理

    目录 一.JVM整体架构 二.JVM运行时内存 2.1 PC 程序计数器 2.2 虚拟机栈 2.3 本地方法栈 2.4 堆 2.4.1 Java堆概念 2.4.2 年轻代和老年代 2.4.3 对象分配 ...

  3. 深入理解Java虚拟机2——内存管理机制及工具

    一.内存区域与内存溢出异常 1. Java虚拟机的运行时数据区: ----------------------------------- 运行时区域 方法区 虚拟机栈 本地方法栈 堆 程序计数器 -- ...

  4. 《深入理解Java虚拟机》内存管理机制 部分 读书笔记

    内存管理 运行时的数据区包括: 程序计数器 一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器. 每个下次都需要有一个独立的程序计数器,各线程间计数器互不影响,独立存储. 如果线程执行的 ...

  5. Java虚拟机理解-内存管理

    运行时数据区域 jdk 1.8之前与之后的内存模型有差异,方法区有变化(https://cloud.tencent.com/developer/article/1470519). java的内存数据区 ...

  6. 怎么把虚拟机清空内存_深入理解java虚拟机1——内存管理机制与回收机制

    文中涉及JVM底层知识大多来自<深入理解Java虚拟机>第2版,内容枯燥乏味,如果看,认真看.跟着撸一遍也可以受益良多. 1.JVM:是运行在操作系统之上的,它与硬件没有直接的交互. 运行 ...

  7. 【深入理解Java虚拟机】自动内存管理机制——垃圾回收机制

      Java与C++之间有一堵有内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来.C/C++程序员既拥有每一个对象的所有权,同时也担负着每一个对象生 ...

  8. 写java线程导致电脑内存不足_如何写出让java虚拟机发生内存溢出异常OutOfMemoryError的代码...

    程序小白在写代码的过程中,经常会不经意间写出发生内存溢出异常的代码.很多时候这类异常如何产生的都傻傻弄不清楚,如果能故意写出让jvm发生内存溢出的代码,有时候看来也并非一件容易的事.最近通过学习< ...

  9. java虚拟机之内存分配

    Java 的自动内存管理主要是针对对象内存的回收和对象内存的分配.同时,Java 自动内存管理最核心的功能是 堆 内存中对象的分配与回收. JDK1.8之前的堆内存示意图: 从上图可以看出堆内存分为新 ...

最新文章

  1. python[外星人入侵] 项目
  2. oracle数据迁移常用
  3. Linux 上扩展swap分区
  4. php mysql_connect 不支持_php mysql_connect不支持的解决方法
  5. Xamarin Evolve 2016 Keynote回顾
  6. UITextField实现左侧空出一定的边距
  7. 上机环境是什么意思_Python能不能自学,可以找到什么工作?
  8. LeetCode 1962. 移除石子使总数最小(优先队列)
  9. 一文教会你认识Vuex状态机
  10. 在华为云ECS上手工通过Docker部署tomcat
  11. 为什么微信小程序也能做游戏?
  12. ZOJ 3993 2017CCPC秦皇岛 M:Safest Buildings
  13. (转)根据两点经纬度计算距离
  14. Linux下的MongoDB基础学习二
  15. 云计算技术与应用赛项赛题库
  16. 复杂背景下的自动驾驶目标检测数据集
  17. 系统更新win11 后,右键没有显示git,添加注册表选项的解决办法
  18. 氢os android 7.0,氢OS 3.0正式推送!基于Android 7.0,简洁纯净
  19. MBA联考逻辑真题1
  20. 记一次.Net Core通过GDI+在CentOS 7(Docker)环境中绘图报错The type initializer for ‘Gdip‘ threw an exception的问题及处理方式

热门文章

  1. android 下一步,在Android上单击“软键盘下一步”时,移至另一个EditText
  2. c++输入一个整数判断是否为完全平方数_[leetcode/lintcode 题解] 谷歌面试题:完美平方...
  3. leetcode刷题:数组的最大子序和
  4. mysql根据排序取前百分之二十_MySQL 性能优化 MySQL常见SQL错误用法
  5. 刷卡读取信息自动录入表格_人事自动化管理系统.xls
  6. 用计算机绘图软件绘制的工程图是图形,用AutoCAD快速绘制机械工程图实用的经验.doc...
  7. keyshot9怎么导入材质_你知道硬质合金刀片是怎么来的吗?讲解直观!
  8. 帝国cms怎么搭建python环境_Python 库/模块的pip安装和IPython的使用
  9. mysql字段作用_mysql用户表host字段作用
  10. vue 指令 v-on 事件修饰符-鼠标事件-什么是事件冒泡