zoukankan      html  css  js  c++  java
  • JVM<一>----------运行时数据区域

    参考:1.JVM Specification: http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.5

             2.《深入理解Java虚拟机》

          刚开始看JVM Specification ,说实话由于专业英语不过关,有些关键词总是看不懂意思,后来参考.《深入理解Java虚拟机》方能感悟到JVM的强大。 我们就先从运行时数据区域开始

    一.运行时数据区域分配图

       The Java Virtual Machine defines various  run-time data areas that are used during execution of a program. Some  of these data areas are created on Java Virtual Machine start-up and are destroyed  only when the Java Virtual Machine exits. Other data areas are per thread. Per-thread   data areas are created when a thread is created and destroyed when the               thread exits.

         JVM在执行程序时定义了多个运行时数据区域,一部分数据区域随   JVM  的创建而创建, 随  JVM  的退出而销毁

                                                                     其他的数据区域随单个线程的创建而创建,随单个线程的退出而销毁

     网上对于JVM中运行时数据区域的有很多版本,但大多都有点瑕疵,上图是我画的,用不同的颜色表明内存区域存在的位子和形成的时间点。 注:块的大小不存在任何含义
     随单个线程创建的有: 1.PC Register 2.Native Method Area 3.JVM Stack
     随JVM创建就创建的有:1.Heap 2.Method Area 3.Constant Pool(其实Method Area 中包含Constant Pool,只不过他是特殊的一块,所有也给他一个特写)
     

    二.各数据块介绍

      2.1 跟随JVM的数据区域

         2.1.1 Heap

                    

        <1>JVM的Heap区域是对于所有Thread 都是共享的

        <2>Heap 是类的对象和数据分配内存的地方

        <3>Heap JVM  的创建而创建, 随  JVM  的退出而销毁

        <4>Heap存储对象的存储空间由自动存储管理系统GC来释放,并且对象从来都不是显示的释放。

        <5>JVM没有固定的自动内存管理系统,一般根据系统的设计需求采用适合的内存管理系统

        <6>Heap 的内存大小可以是固定的 也可以根据需求变化

        <7>存放Heap的内存块可以是不连续的

        <8>如果根据计算,自动内存管理系统不能提供更多的内存给Heap,JVM将抛出outOFMemoryError

    2.1.1 Method Area

            

               <1>JVM的Method Area 区域是对于所有Thread 都是共享的

        <2>Method Area 类似于:存放传统语言编译后的代码的内存区域 或者  运行系统过程中的文本区域  (第一个例子要好理解点)

           它存放单个类的结构如:运行时常量池,字段,方法数据,构造方法和普通方法的代码,同样包括在类中使用的实例、接口初始化的特殊方法。

        <3>Method Area 随JVM  的创建而创建, 随  JVM  的退出而销毁

        <4>Heap逻辑上是Heap的一部分,但GC并不会对他产生任何影响

        <5>暂无针对编译后的代码管理的策略和内存分配方法。

        <6>Heap 的内存大小可以是固定的 也可以根据需求变化

        <7>存放Heap的内存块可以是不连续的

        <8>如果方法区不能满足内存分配请求,JVM将抛出outOFMemoryError

        

     

     
  • 相关阅读:
    day10 测试2
    算法题
    day10 自动化测试
    day09 测试
    进行试验,对比
    多层网络的SIR实现
    day08 商城项目
    day07 cookie session 模板
    day06 模型类
    纸上谈兵:图(graph)
  • 原文地址:https://www.cnblogs.com/fjsnail/p/4496025.html
Copyright © 2011-2022 走看看