• JVM 详解


                                                                     ----------- 你的时间不多了,抓紧做你想做的

    引言: 
       JVM 其实没有那么神秘, 其实就是运行在操作系统上,帮助我们运行程序的一个程序

    一、规范

    根据《Java 虚拟机规范(Java SE 7 版)》规定,Java 虚拟机所管理的内存如下图所示

                                   

     个人理解:规范只是一个约束,但是在具体的不同的java 虚拟机实现厂商细节是不一样的 , 目前我们接触到大多都是sun公司的hotSpot 虚拟机,

                      HotSpot 对于内存区域的具体划分没有像上面划分的这么细,它主要就划分成两个部分,一个是堆一个是栈。

    知识点: 

    宏观来看:

                  方法区 + 堆: 用于存放数据的

                 虚拟机栈 +  本地方法栈  + 程序计数器 : 用于存放执行的逻辑的

    微观来看

                方法区: 用于存放类的元数据(元数据: 简单名字 + 描述信息, 例: spring.io.file + public + static, 这些描述这个类的信息的东西)

                堆: 用于存放类的实例数据

    字符串常量池存放在方法区中‘’‘’

    局部变量表存放在栈里面

    JVM 内存分配

      当一个对象被创建后,他是如何在java 虚拟机中生存下来的, 他将经历哪些磨难?

    官方语言: 

    1. 对象优先在Eden 分配
    2. 大对象直接进行如老年代
    3. 长期存活下来的对象将进入老年代
    4. 动态对象年龄判定
    5. 空间分配担保

      上述知识支撑: 堆主要分为: 新生代  和 老年代, 其中新生代分为  Eden  +  survivor1(s1)  +  survivor(s2),[比例  8 : 1 : 1], 

            新生代 和 老年代 : 一般占堆大小的   1/3  和 2/3  (这个可以通过参数进行设计)。

     GC(垃圾回收主要发生在堆里面), 主要包含minorGC,   fullFC

    c,  FullGc。 其中 minorGc 主要针对新生代, FullGc 主要针对 老年代(永久代)。

    当内存不够的时候, 如法存放一个将要创建的对象的时候,就会触发相应的Gc(垃圾回收机制)。

  • 相关阅读:
    Elasticsearch Windows下安装及配置集群
    .Net文件压缩
    DateHelper
    lambda Helper
    Log4net的使用
    python3之rabbitMQ
    python3之协程
    python3之paramiko模块
    python3之redis
    redis
  • 原文地址:https://www.cnblogs.com/helloqiufei/p/12267598.html
Copyright © 2020-2023  润新知