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

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

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

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

  • 相关阅读:
    k8s service的DNS名称解析之CoreDNS
    k8s service负载均衡实现之iptables
    k8s 将项目暴露到互联网访问
    k8s 日志按体现分类与采集思路
    k8s ingressd的http对外暴露网站
    k8s 容器交付流程和项目部署流程
    k8s ingress使用DaemonSet部署
    Google Base与科学家数据共享 (Nature Vol 438|24 November 2005)
    总结:rdf:ID和rdf:about的区别(转载)
    一个元搜索引擎
  • 原文地址:https://www.cnblogs.com/ywsheng/p/11251067.html
Copyright © 2011-2022 走看看