• JVM对象分配和GC分布【JVM】


    最近在学习java基础结构,刚好学到了jvm,总结了以下并可以结合思维导图认识以下Jvm的对象:

    栈:什么是栈? 先说一下栈的数据结构吧,栈它是一种先进后出的数据结构(FILO),跟队列刚好相反(先进先出FIFO),生活中有哪些例子,
    举个例子
    	给子弹上膛,上弹的操作就类似于栈的数据结构,先压入的子弹后发射,因为它被压入到了最底部(栈底),所以,它会先发射最上面的子弹(栈顶),
    	说了这个概念,想必应该已经熟悉了栈的数据结构了吧。
       再说一下栈,栈相当于一个桶,里面有方法区,局部变量表,方法返回地址,操作栈(加减乘除)
       每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
      每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。 
      每个方法内部的操作都是在栈内进行操作的(操作栈)
      
    堆: 什么是堆?堆是分布在java虚拟机上的一块内存,所以,它是物理存在的,
             堆里面存储的是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
             jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身,可以这样说,堆区的内容是线程共享区

     

    
    

    本篇内容主要写的是对象的分配,所以,理论上只跟“堆”有关系, 结合上面的思维导图,说一下,当用户new Object的时候,jvm会把这个对象放入堆里面,并把对象的引用存入栈里面,创建对象之后,自然下一步就是为对象分配内存咯, 堆内存分为“新生代”(eden)和老年代(old),新new出来的对象会被存放在eden区,当eden区域放不下的时候,设计jvm的工程师会想,eden区的对象这么多都不用了, 能不能把不用的对象给它回收掉呢? 接下来就很牵强得扯到了 jvm的eden区的回收(Young Garbage Collection 下面简称 YGC)。

    	YGC的目的是处理回收eden区没有被引用的对象,处理一次YGC会给这个对象回收次数+1(这是为什么呢? 因为jvm考虑到有些eden区创建的大对象YGC并不能回收掉
    	这个时候YGC会将它放入Survivor区域)
    

    新生代 = 1个eden区 + 2个survivor 区

    	survivor是什么?
    		 上面说道了YGC将对象回收不了的放入Survivor区,survivor区存放的是eden区无法回收的对象,它对应的也是一块内存区域,但是这个区域很小,同时这个区域
    		 又分为  s0、 s1 两块连续的内存块 ,如果说,S区域存满的时候,此时,那部分回收不了对象放置哪里呢?
    		 
    		 答案是放入老年代,当一个对象新生代已经容不下你的时候,那么你就乖乖得变“老”吧!
    		 
    		 当然,如果说S区的对象存活达到一定得阈值,JVM会计算这个对象的当前回收次数,如果大于某个值,默认15,直接将这个对象放入老年代,这样也就避免了jvm垃圾堆积的
    		 情况了
    

    当对象达到老年代的时候

    		当一个对象到了老年代的时候,其他对象到达老年代也无法放下时,jvm会执行FGC(Full Garbage Collection)操作,这个时候,垃圾收集器就进行全GC操作,如果FGC收集过后
    		对象仍然无法存放到内存区,这个时候JVM会告知你  内存不足  会抛出OOM(Out Of Memory)
    

    JVM调优

    		当出现了OOM,快速定位,在JVM内设置运行参数,-Xx:+HeapDumpOnOutOfMemoryError,这个时候出现了OOM,系统会打印出堆内的信息
    		
    		如果系统出现了OOM的时候,你会怎么办呢?

    原文:https://choviwu.top/archives/jvmHeap
  • 相关阅读:
    property函数
    robotframework常见问题解决汇总
    python 基本的序列和映射规则
    robot framework -记录错误
    python 函数部分
    python-文件操作
    网络检测,版本更新
    应用FMDB进行数据存储
    xcode5 各区域快捷键大全
    全国第七届大学生计算机设计大赛
  • 原文地址:https://www.cnblogs.com/ChoviWu/p/10192007.html
Copyright © 2020-2023  润新知