zoukankan      html  css  js  c++  java
  • Jvm内存结构

     

    Jvm的内存结构:

    程序计数器:是JVM中一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器,字节码解释器工作时就是通过这个计数器的值来

    选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理等(线程私有)

    虚拟机栈:虚拟机栈是指方法执行的内存模型,每个方法执行的时候都会创建一个栈帧,用于存储局部变量表、操作数栈、动态连接、方法出口信息,

    每一个方法从调用到执行完成的过程,就对应的栈帧的入栈和出栈

     局部变量表:存放了编译期的各种基本数据类型(boolean,byte,char,shor,int,float,double,long)、对象引用(可以是一个指向对象起始地址的引用指针,也可以是指向一个代表对象的句柄)

    本地方法栈:本地方法栈与虚拟机栈作用类心,只是虚拟机栈为虚拟机执行java方法服务,而本地方法栈则为虚拟机使用到的Native方法服务

    堆:堆是垃圾收集管理的主要区域,堆可以分为:新生代(Eden空间、From区、To区)和老年代(线程共享)

    方法区:存储虚拟机加载的类信息、常量、静态变量等

     运行时常量沲(属于方法区):用于存放编译期生成的各种字面量和符号引用,这部份内容将在类加载后进方法区的运行时常量沲

    对象的创建过程:

    1、虚拟机遇到new指令,判断常量沲中是否有对应的符号引用,检查这个符号引用代表的类是否被加载、链接、初始化,如果没有就必须进行类的加载过程

    2、类加载检查后,需要进行对象的内存分配,内存分配有两种方式:

    指针碰撞(新生代,复制算法 serial、ParNew)

    空闲列表(老年代,CMS ,serial old)

  • 相关阅读:
    LeetCode Flatten Binary Tree to Linked List
    LeetCode Longest Common Prefix
    LeetCode Trapping Rain Water
    LeetCode Add Binary
    LeetCode Subsets
    LeetCode Palindrome Number
    LeetCode Count and Say
    LeetCode Valid Parentheses
    LeetCode Length of Last Word
    LeetCode Minimum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/xyz-star/p/10168291.html
Copyright © 2011-2022 走看看