Java虚拟机自动内存管理
生活规律告诉我们,在享受便利的同时一般都会付出巨大的代价,如果你在享受了便利的同时,还没有为此付出代价,不是说明没有,只是还没到付出的时候。试问,有哪个Java系统架构师不懂Java虚拟机?纵观Java程序员的发展历程,又有多少人是卡在了Java虚拟机之上。所以如果你还没有感觉到为此付出代价,说明你已经Java虚拟机的糖衣炮弹所击中,且被毒害之深。Java的自动内存管理就是这样,像毒药一样,一旦上瘾就很难戒掉,而且会沉迷于此。而正确的做法就是了解其原理,拿到尚方宝剑,当虚拟机不好好为你提供服务时,拿出宝剑,以便立刻制服他。而此尚方宝剑的锻造需要经历巨大磨难,唯以毅力坚定者方能铸成。
Java的内存管理主要两部分,一部分是Java的内存分配,另外一部分是内存的回收。对于这部分内容的了解,首先必须了解清楚Java虚拟机的内存结构。如果对内存结构不熟悉的朋友可以看关于Java虚拟机的内存结构这篇文章。我们知道内存可以分为5大块区域,从自动内存管理的角度,线程独占区的内存是比较容易进行管理的,线程创建就要分配这些区域,线程的销毁这些区域也就释放了,因此我们这里主要讨论的主要是关于堆内存和方法区内存的管理。在之前的文章中也提到了虚拟机规范中并没有对方法区这块内存做太多的限制,而且是作为堆内存的一个逻辑部分。下面就分别从内存的分配与内存的回收两个方面来了解Java虚拟机的内存管理。
内存分配,内存的分配相比较内存的回收要简单一些,一般有几个原则:
1.对象首先在Eden区域分配。
2.大对象直接进入到老年代。
3.多次存活的对象分配到老年代中。
4.内存分配担保。
5.逃逸分析与栈上分配。
内存回收,这部分涉及的内容就比较多了,首先是内存回收所用到的算法,比如标记对象为垃圾对象的引用计数法以及可达性分析法。在比如垃圾收集算法标记清除算法,复制算法,标记整理算法以及分代收集算法等等。这些理论知识积累了之后就到垃圾收集器,垃圾收集器是执行垃圾回收的具体实现,垃圾收集器有很多,不同的垃圾收集器的适用场景不同,关注点也不同,在不同的环境下选择合适的垃圾收集器并指定合适的参数是一个系统架构师必备的能力。这样对于内存的回收就达到标准了。总结一下主要的内容
0.垃圾对象判断算法
1.垃圾回收算法
2.垃圾收集器
好了,到这里关于java内存管理所需要知识点就都列到这里了,如果你对Java的自动内存管理比较感兴趣,可以观看《深入理解Java虚拟机》这套视频,这里详细的讲解了上面的所有的知识点。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
构建基于Spark的推荐引擎(Python)
在学习Spark机器学习时,书上用scala完成,自己不熟悉遂用pyshark完成,更深入的理解了spark对协同过滤的实现 在这里我们的推荐模型选用协同过滤这种类型,使用Spark的MLlib中推荐模型库中基于矩阵分解(matrix factorization)的实现。 协同过滤(Collaborative Filtering) 协同过滤简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息,个人通过合作的机制给予信息相当程度的回应(如评分)并记录下来以达到过滤的目的进而帮助别人筛选信息,回应不一定局限于特别感兴趣的,特别不感兴趣信息的纪录也相当重要。 很简单的例子来介绍就是日常我们生活中经常找电影会通过向和自己品味类似的朋友要求推荐,这就是协同过滤的思想 基于用户的协同过滤推荐机制的基本原理 基于用户或物品的方法的得分取决于若干用户或是物品之间依据相似度所构成的集合(即邻居),故它们也常被称为最邻近模型。 矩阵分解 这里我们要处理的数据是用户提供的自身偏好数据,即用户对物品的打分数据。 这些数据可以被转换成用户为行,物品为列的二维矩阵,即评分矩阵A(m*n)表示m...
- 下一篇
Netflix推出Hollow,处理内存数据集的Java库
Netflix最近推出了Hollow,一款Java库和工具包,旨在有效缓存不属于“大数据”的数据集。这些数据集可能是电子商务和搜索引擎的元数据,或者是Netflix电影和电视节目的元数据。处理这种数据集的传统方法包括数据存储或串行化,但这可能会有可靠性和延迟问题。Hollow的入门指南中总结了核心概念和命名方法: Hollow管理由单个生产者构建的数据集,并向一个或多个消费者传送以用于只读访问。数据集会随着时间而改变。改变的数据集的时间线可以分为离散的数据状态,每个状态都是那个特定时间点数据的完整快照。 生产者和消费者通过在数据状态之间转换的状态引擎来处理数据集。生产者使用写状态引擎,而消费者使用读状态引擎。 Hollow取代了Netflix原先的内存数据集框架Zeno。数据集现在用紧凑的、固定长度的、强类型的数据编码表示。这种编码最小化了数据集占用的空间,并将编码记录“打包在JVM堆上合并的可重用内存条中,以避免影响繁忙的服务器上的GC行为。” 入门要开始使用Hollow示例,请参考以下POJO: publicclassMovie{ longid; Stringtitle; intr...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS6,CentOS7官方镜像安装Oracle11G
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS关闭SELinux安全模块