开发者社区> 问答> 正文

Java虚拟机自动内存管理怎么处理操作的?

主要分为几个区域,分别怎么运转的?

展开
收起
zwt9000 2017-09-19 14:20:57 2796 0
5 条回答
写回答
取消 提交回答
  • 网上搜索一下,都有的
    https://segmentfault.com/a/1190000008134012

    2019-07-17 21:36:13
    赞同 展开评论 打赏
  • 喜欢java,喜爱折腾技术

    实战Java虚拟机:JVM故障诊断与性能优化 (葛一鸣著)

    这本书不错,比周志明的更实用,案例更多

    2019-07-17 21:36:13
    赞同 展开评论 打赏
  • 可以去看下周志明的深入浅出java虚拟机,目前第二版,讲解的不错,

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

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

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

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

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

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

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

    2019-07-17 21:36:13
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
从《阿里巴巴Java开发手册》编写推广谈技术成长 立即下载
如何通过 Serverless 提高 Java 微服务治理效 立即下载
云服务器ECS内存增强型实例re6全新发布 立即下载