生活规律告诉我们,在享受便利的同时一般都会付出巨大的代价,如果你在享受了便利的同时,还没有为此付出代价,不是说明没有,只是还没到付出的时候。试问,有哪个Java系统架构师不懂Java虚拟机?纵观Java程序员的发展历程,又有多少人是卡在了Java虚拟机之上。所以如果你还没有感觉到为此付出代价,说明你已经Java虚拟机的糖衣炮弹所击中,且被毒害之深。Java的自动内存管理就是这样,像毒药一样,一旦上瘾就很难戒掉,而且会沉迷于此。而正确的做法就是了解其原理,拿到尚方宝剑,当虚拟机不好好为你提供服务时,拿出宝剑,以便立刻制服他。而此尚方宝剑的锻造需要经历巨大磨难,唯以毅力坚定者方能铸成。
Java的内存管理主要两部分,一部分是Java的内存分配,另外一部分是内存的回收。对于这部分内容的了解,首先必须了解清楚Java虚拟机的内存结构。如果对内存结构不熟悉的朋友可以看关于《Java虚拟机的内存结构》这篇文章。我们知道内存可以分为5大块区域,从自动内存管理的角度,线程独占区的内存是比较容易进行管理的,线程创建就要分配这些区域,线程的销毁这些区域也就释放了,因此我们这里主要讨论的主要是关于堆内存和方法区内存的管理。在之前的文章中也提到了虚拟机规范中并没有对方法区这块内存做太多的限制,而且是作为堆内存的一个逻辑部分。下面就分别从内存的分配与内存的回收两个方面来了解Java虚拟机的内存管理。
内存分配,内存的分配相比较内存的回收要简单一些,一般有几个原则:
1.对象首先在Eden区域分配。
2.大对象直接进入到老年代。
3.多次存活的对象分配到老年代中。
4.内存分配担保。
5.逃逸分析与栈上分配。
内存回收,这部分涉及的内容就比较多了,首先是内存回收所用到的算法,比如标记对象为垃圾对象的引用计数法以及可达性分析法。在比如垃圾收集算法标记清除算法,复制算法,标记整理算法以及分代收集算法等等。这些理论知识积累了之后就到垃圾收集器,垃圾收集器是执行垃圾回收的具体实现,垃圾收集器有很多,不同的垃圾收集器的适用场景不同,关注点也不同,在不同的环境下选择合适的垃圾收集器并指定合适的参数是一个系统架构师必备的能力。这样对于内存的回收就达到标准了。总结一下主要的内容
0.垃圾对象判断算法
1.垃圾回收算法
2.垃圾收集器
好了,到这里关于java内存管理所需要知识点就都列到这里了,如果你对Java的自动内存管理比较感兴趣,可以观看《深入理解Java虚拟机》这套视频,这里详细的讲解了上面的所有的知识点。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。