zoukankan      html  css  js  c++  java
  • 深入理解java虚拟机(1)

    java内存区域

    Java虚拟机执行java程序时会将管理的内存划分为若干个区域:

      1. 程序计数器

        程序计数器是一个”线程私有“的内存区域,用于获取下一条需要执行的字节码指令,如分支、循环、跳转等。

      2. Java虚拟栈

        在Java内存划分的时候,经常会听到将其分为”堆内存“和”栈内存“,这种分法中的”栈内存“就是指Java虚拟栈,更具体点就是Java虚拟栈中的局部变量表部分。——局部变量表存放的是java基本数据类型(如boolean、int等)、对象引用(reference类型,可能是对象起始地址的引用指针、代表对象的句柄或者其他与此对象相关的位置)和returnAddress类型(指向一条字节码指令的地址)。

        Java虚拟栈同样也是”线程私有“的内存区域,各个线程互不影响。

      3. 本地方法栈

        该区域与虚拟机栈所发挥的作用非常相似,只是虚拟机栈为虚拟机执行Java方法服务,而本地方法栈则为使用到的本地操作系统(Native)方法服务。

      4. Java堆

        Java堆是虚拟机管理的内存中最大的一块,它是被所有线程共享的一块区域,用于存放对象实例,是GC回收的主要区域。

        Java堆可以是物理上不连续的内存空间,只要逻辑是连续的即可。

      5. 方法区

        方法区也是各个线程共享的内存区域,用于存放被虚拟机加载的类信息、常量、静态变量、及时编译器编译后的代码等数据。——在jdk1.7之后,字符串常量重新被移到了堆中。

      6. 运行时常量池

        运行时常量池属于方法区的一部分,用于存放编译期生成的各种字面量和符号引用。——常量不一定只有运行时才会产生,运行期间也可以放入新的常量,例如String.intern()方法。

  • 相关阅读:
    WIN平台下ASE使用资源文件创建ASE服务
    C#高级编程笔记(三)
    C#高级编程笔记(四)
    高质量的HTML+CSS。
    C#高级编程笔记(二)
    编写高质量代码(JavaScript篇)
    C#高级编程笔记(一)
    开始博客+生活+学习
    巴中故里
    纱丽
  • 原文地址:https://www.cnblogs.com/oeleven/p/10301307.html
Copyright © 2011-2022 走看看