参考: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

    

 

 

JVM<一>----------运行时数据区域的更多相关文章

  1. JVM学习-运行时数据区域

    目录 前言 运行时数据区 程序计数器 Java虚拟机栈 局部变量表 基础数据类型 对象引用 returnAddress 操作数栈 动态链接 方法返回地址 Java堆 方法区 类型信息 字段描述符 方法 ...

  2. JVM学习笔记:Java运行时数据区域

    JVM执行Java程序的过程中,会使用到各种数据区域,这些区域有各自的用途.创建和销毁时间.根据<Java虚拟机规范>,JVM包括下列几个运行时数据区域,如下图所示: 其中红色部分是线程私 ...

  3. 一. JVM发展史,运行时数据区域,四大引用

    一.JVM的出现 JVM将字节码解释成不同os下的机器指令,有了jvm,java语言在不同平台上运行时不需要重新编译 虚拟机发展史 (1)Sun Classic classic jvm要么采用纯解释器 ...

  4. JVM运行时数据区域

    上面已经聊过JVM是什么东东,也谈过了JVM内存的垃圾回收机制.这一篇博客我们来聊聊JVM运行时数据区域. JVM运行时数据区域由5块部分组成,分别是堆,方法区,栈,本地方法栈,以及程序计数器组成. ...

  5. JVM 内存区域 (运行时数据区域)

    JVM 内存区域 (运行时数据区域) 链接:https://www.jianshu.com/p/ec479baf4d06 运行时数据区域 Java 虚拟机在执行 Java 程序的过程中会把它所管理的内 ...

  6. 深入理解Java虚拟机 -- 读书笔记(1):JVM运行时数据区域

    深入理解Java虚拟机 -- 读书笔记:JVM运行时数据区域 本文转载:http://blog.csdn.net/jubincn/article/details/8607790 本系列为<深入理 ...

  7. [jvm]运行时数据区域详解

    了解虚拟机是怎么使用内存的,有助于我们解决和排查内存泄漏和溢出方面的问题.详解java虚拟机内存的各个区域,分析这些区域的作用服务对象以及可能发生的问题. 一.运行时数据区域 java虚拟机在执行ja ...

  8. JVM学习笔记(1)--运行时数据区域

    运行时数据区域 相对于c,c++.程序设计时,java并不需要手动释放或者创建内存用于存放程序,这的确使得java开发变得容易和轻松,一旦有一天出现了内存泄漏或者内存溢出的问题,如果不了解JVM虚拟机 ...

  9. JVM 运行时数据区域划分

    目录 前言 什么是JVM JRE/JDK/JVM是什么关系 JVM执行程序的过程 JVM的生命周期 JVM垃圾回收 JVM的内存区域划分 一.运行时数据区包括哪几部分? 二.运行时数据区的每部分到底存 ...

随机推荐

  1. 解决BeanNotOfRequiredTypeException: Bean named 'XXX' must be of type XXX, but was actually of type XXX问题

    Java新手,困扰了一下午. 发布时总是报这样一个错误. org.springframework.beans.factory.BeanCreationException: Error creating ...

  2. [BZOJ 1052][HAOI2007]覆盖问题(二分答案)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1052 分析: 挺有想法的一道题,先二分答案ans,主要是判断的问题. 首先可以弄出把所 ...

  3. 20.C#LINQ基础和简单使用(十一章11.1-11.2)

    终于看到了第11章,之前虽然也有看过,但没有太仔细,在工作中也偶尔会使用,但不明白其中的原理,那现在就来讲讲LINQ,做一做书虫~~ 首先先了解下LINQ的三个要点: LINQ不能把非常复杂的查询表达 ...

  4. web前端开发教程系列-1 - 前端开发编辑器介绍

    目录: 前言 一. Webstorm 1. 优点 2. 缺点 3. 教程 4. 插件 5. 技巧 二. SublimeText 1. 优点 2. 缺点 3. 教程 4. 插件 5. 技巧 前言 由于很 ...

  5. 每天一个linux命令(18):find 命令概览

    Linux 下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强大的功能,所 以它的选项也很多,其中大部分选项都值得我们 ...

  6. 幻灯片插件FlexSlider -- Amaze UI幻灯片参数

    用了Amaze UI 的人就知道,其幻灯片插件是 data-am-slider='{}'来传参数的:(以下代码来自Amaze UI 官网) <div data-am-widget="s ...

  7. Java基础-String、StringBuffer、StringBuilder

    看下面这段代码: public class Main { public static void main(String[] args) { String string = ""; ...

  8. Hibernate-入门教程

    首先了解hibernate的目录结构 . +lib antlr.jar cglib-full.jar asm.jar asm-attrs.jars commons-collections.jar co ...

  9. PL/0编译器(java version) - Interpreter.java

    1: package compiler; 2:   3: import java.io.BufferedReader; 4: import java.io.BufferedWriter; 5: imp ...

  10. ubuntu自动关闭屏幕显示器

    在程序中系统调用如下两个命令,可以关闭显示器. 1,xset dpms force off 2,system("vbetool dpms off"); 因为应用要在ubuntu开机 ...