zoukankan      html  css  js  c++  java
  • JVM

     

     

    Minor GC的触发条件:
    • 当Eden区满时触发。
    Full GC的触发条件:
    • 调用System.gc时,系统会建议执行Full GC,但是不一定执行。
    • 老年代空间不足时触发。
    • 方法区(永久代/元空间)空间不足时触发。
    • 通过Minor GC后进入老年代的平均大小大于老年代的可用连续内存时触发。
    • 由Eden区、From Space区向To Space区复制时,对象大小大于To Space可用内存,则把该对象转存到老年代,且老年代的可用连续内存小于该对象大小时触发。

    分代收集算法的执行流程

    1. 新建的对象优先分配在Eden区;
    2. 当Eden区满了,就会触发Minor GC,Eden中的存活对象被移动到Survivor0,Eden被清空;
    3. 等Eden区再满了,再次触发Minor GC,Eden和Survivor0中的存活对象又会被复制到Survivor1,S0和Eden被清空,然后下一轮S0与S1交换角色,如此循环往复。
    4. 当两个Survivor区切换了几次(HotSpot虚拟机默认15次)之后,仍然存活的对象,将被复制到老年代

    说一下 jvm 的主要组成部分?及其作用?

    • 类加载器(ClassLoader)

    • 运行时数据区(Runtime Data Area)

    • 执行引擎(Execution Engine)

    • 本地库接口(Native Interface)

    组件的作用: 首先通过类加载器(ClassLoader)会把 Java 代码转换成字节码,运行时数据区(Runtime Data Area)再把字节码加载到内存中,而字节码文件只是 JVM 的一套指令集规范,并不能直接交个底层操作系统去执行,因此需要特定的命令解析器执行引擎(Execution Engine),将字节码翻译成底层系统指令,再交由 CPU 去执行,而这个过程中需要调用其他语言的本地库接口(Native Interface)来实现整个程序的功能。

    在Java语言里,可作为GC Roots对象的包括如下几种:

    • 虚拟机栈(栈桢中的本地变量表)中的引用的对象
    • 方法区中的类静态属性引用的对象
    • 方法区中的常量引用的对象
    • 本地方法栈中JNI的引用的对象

    -Xmx3550m:设置JVM最大堆内存为3550M。
    -Xms3550m:设置JVM初始堆内存为3550M

    2.JVM垃圾回收算法

      答:三种算法。https://www.cnblogs.com/cxiaocai/p/11547743.html

      复制算法,由一个内存块复制到一个内存块下,缺点是有一半的内存是留给复制用的,不用用于直接存储

      标记清理,扫逐个内存块是否可被回收,可以回收的就回收掉,缺点是会产生内存碎片

      标记整理,标记整理是是标记清除的升级版,优点:解决内存碎片问题。缺点:整理阶段,由于移动了可用对象,需要去更新引用。

  • 相关阅读:
    Java 回调函数的理解
    Java对象初始化
    Hibernate中get方法和load方法的区别
    Java 如何判断导入表格某列是否有重复数据
    Java学习之Java的单例模式
    Java中怎么设置文件权限
    div居中问题
    JSON
    js
    ajax
  • 原文地址:https://www.cnblogs.com/ywsheng/p/11251067.html
Copyright © 2011-2022 走看看