zoukankan      html  css  js  c++  java
  • JVM的内存结构和内存分配?

      a):Java内存模型(方法区、本地方法栈、虚拟机栈、程序计数器、堆)

        Java虚拟机将其管辖的内存大致分为三个逻辑部分:方法区(Method Area)、Java栈和Java堆

        1、方法区是静态分配的,编译器变量绑定在某个存储位置上,而且这些绑定不会在运行时改变。

           常数池,源代码中的命名常量,String常量和static变量保存在方法区

        2、JavaStack是一个逻辑概念,特点是后进先出。一个栈的空间可能是可连续的,也可能是不连续的。

             最典型的是Stack应用是方法的调用,Java虚拟机每调用一次方法就创建一个方法帧(frame),退出该方法则对应的,方法帧被弹出(pop)。栈中存储的数据也是运行时确定的。

        3、Java堆分配(heap allocation)意味着以随意的顺序,在运行时进行存储空间分配和收回的内存管理模型。

           堆中存储的数据常常是大小、数量和生命周期在编译时无法确定的。Java对象的内存总是在heap中分配。我们每天都在写代码,每天都在使用JVM的内存。

      b):Java内存分配

        1、基础数据类型直接在栈空间分配

        2、方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收

        3、引用数据类型,需要new来创建,既在栈空间分配一个地址孔家,又在堆空间分配对象的类变量

        4、方法的引用参数,在栈空间分配一个地址空间,并指向堆空间的对象区,当方法调用完后从栈空间回收;

        5、局部变量new出来时,在栈空间和堆空间中分配空间,当局部变量生命周期结束后,栈空间立刻被回收,堆空间区域等待GC回收

        6、方法调用时传入的实际参数,现在栈空间分配,在方法调用完成后从栈空间释放

        7、字符串常量在DATA区域分配,this在堆空间分配

        8、数组既在栈空间分配数组名称,又在堆空间分配数组实际的大小

  • 相关阅读:
    工作那些事(四)大公司VS小公司
    HTTP Keep-Alive详解
    Burp Suite Walkthrough(英文版)
    Burp Suite Walkthrough(中文版)
    Burp Suite教程(英文版)
    XSS之学习误区分析
    工具猫魔盒介绍
    XSS脚本攻击漫谈
    WEB黑客工具箱之FireBug介绍
    WEB黑客工具箱之LiveHttpHeaders介绍
  • 原文地址:https://www.cnblogs.com/scar1et/p/11955732.html
Copyright © 2011-2022 走看看