• JVM 概述


    JVM 布局

    JVM 构成

    1,Java 虚拟机栈  

           帧栈 方法执行的内存模型(组成部分)

                   ①:操作数栈

                   ②:局部变量表

                   ③:动态链接表

                   ④:方法退出地址

           运行过程:(简单理解,可以通过javap命令 帮字节码反编译为汇编语言,查看帧栈的操作过程)

                 ①:每个方法的执行和返回,对应帧栈在JVM虚拟机栈中的入栈和出栈过程   

                 ②:方法的执行过程中涉及到数据计算过程  对应操作数栈的入栈和出栈,以及局部变量表的更新

    2,Java native方法栈

                上面的Java 虚拟机栈是操作Java 方法的,如果操作的是native 方法,那么对应的内存模型就是 native方法栈,其实执行的过程基本上和java 虚拟机栈大同小异。

    3,程序计数器

                JVM 怎么知道每个线程 当前应该执行到那个字节码指令,就是通过程序计算器来操作的。

    4,堆

                Java程序员经常接触的区域

              

                Minor GC 流程 :1,new 对象以后会在Eden区域分配一块内存,Minor GC 以后,会将存活的对象copy到to区域 清空Eden和From区域
                                            2,From对象和To对象角色互换 To变成From 

                                            3,再一次Minor GC 以后 Eden和From 区域 存活的对象 copy到 To 区域,清空Eden和From区域 ,From对象和To对象角色互换

                QA: 为啥年轻代 需要有Survivor From和Suvivor To  2个区域,为啥不能合并成一个

                答:如果只有1个,我们来模拟一次Minor GC 过程,首先需要标记Survivor 内存块中和Eden那些数据需要清除(标记-清除),清除过程需要一条一条清除,不能像上面的过程整个删除Survior From 内存块

                    GC 效率低下,其次,删除完以后,Survivor 内存空间极其分散,给一个稍微大一点的对象分配内存,都因为有可能木有连续的内存可以分配而进行一次Minor GC 进行内存回收

    5,元空间/方法区

               jdk8以前方法区称为永久代,意思就是垃圾回收器永远不会回收这一块(这一块内存主要存储 (class 对象,静态常量池,动态常量池)没啥可回收的,当然实际根据每个虚拟机的不同,会有不同的回收的策略哈,也有不回收的)),jdk8 以后元空间为堆外内存         啦,即在系统内存上直接分配。

       

    6,常用工具

           jps 列出JVM 虚拟机Java线程状况工具 ,使用方法 jps

          

           jstack  Java堆栈跟踪工具(线程快照)jstack -l pid >> path

          

           jmap java 内存映射工具(堆内存快照)

           

           jstat 虚拟机统计信息监控工具(GC 统计信息)

           

             

  • 相关阅读:
    一天摄入多少蛋白质比较合理?
    给函数添加元数据(python)
    反转链表(C++实现)
    删除链表的中间节点(C++实现)
    在双向链表中删除倒数第K个链表节点(C++实现)
    在单链表中删除倒数第K个节点(C++实现)
    二叉树的创建及遍历(递归和非递归C++实现)
    删除排序数组中的重复项(C++实现)
    打印两个有序链表的公共部分(C++实现)
    用一个栈实现另一个栈的排序(C++实现)
  • 原文地址:https://www.cnblogs.com/huxuhong/p/13387422.html
Copyright © 2020-2023  润新知