• java虚拟机运行时数据
  1. 程序计数器
    1. 是一块较小的内存空间,属于线程私有的内存。
    2. 用来记录正在执行的虚拟机字节码指令的地址。
    3. 每个线程都需要一个独立的程序计数器,各个线程间的计数器互不影响,独立存储。
    4. 多线程:通过线程轮流切换并分配处理器执行时间的方法来实现的 。
  2. Java虚拟机栈
    1. 属于线程私有,与线程的生命周期相同。
    2. 内存模型:每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量、操作数栈、动态链接、方法接口等。
    3. 本区域存在两种异常:线程请求的栈深度大于虚拟机所允许的深度,抛出StackOverflowError异常;申请不到足够的内存,抛出OutOfMenoryError异常。
  3. 本地方法栈:与虚拟机栈的作用很相似;区别:虚拟机执行方法时,本地方法栈为虚拟机使用的是Native方法服务。同样的两种异常方法:线程请求的栈深度大于虚拟机所允许的深度,抛出StackOverflowError异常;申请不到足够的内存,抛出OutOfMenoryError异常。
  4. JAVA堆
    1. 所有的对象实例以及数组都要在堆上分配。
    2. java虚拟机中管理的最大的一块内存。
    3. 被所有线程共享的一块内存区域,在虚拟机启动时创建。
    4. java堆是垃圾收集器管理的主要区域,因此也成:‘GC堆’
      1. 细分:老生代和新生代;
    5. java虚拟机可以在物理上不连续的内存空间,只要逻辑上是连续即可。
    6. 抛出异常:堆中没有内存完成实例分配,抛出OutOFMenoryError
  5. 方法区
    1. 各个线程共享的内存区域,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
    2. java虚拟机规范对方法区的限制非常宽松,除了和java堆一样不需要连续的内存空间和可以选择固定大小或者可扩展外 ,还可以选择不实现垃圾收集。
    3. 当方法区无法满足内存分配需求时,抛出:OutOFMenoryError异常。
  6. 运行时常量池
    1. 属于方法区的一部分
    2. 存放:编译期生成的各种字面量(初始化的常量值)和符号引用。
    3. 具备动态性。
    4. 当常量池无法满足内存分配需求时,抛出:OutOFMenoryError异常。
  7. 直接内存
    1. 并不是虚拟机运行时数据区的一部分,也不是java虚拟机中规范定义的内存区域,但是被频繁使用。
    2. 抛出异常:OutOFMenoryError

java虚拟机内存区域的更多相关文章

  1. 重读《深入理解Java虚拟机》一、Java虚拟机内存区域的划分

    一.Java虚拟机内存区域如何划分 1.Java虚拟机内存区域的划分 区域名称 作用(用途) 类型 特点 虚拟机规定异常情况 内存分配与回收 其他说明 1 程序计数器 指示当前正在执行的字节码指令地址 ...

  2. 总结Java虚拟机内存区域模型

    本篇文章主要来总结一下Java虚拟机内存的各个区域,以及这些区域的作用.服务对象以及其中可能产生的问题,作为大家的面试宝典. 首先我们来看一下Java运行时的数据区域,Java虚拟机在执行Java程序 ...

  3. 一文解析总结Java虚拟机内存区域模型

    最近抽空看了一点<深入理解Java虚拟机>,本篇文章主要来总结一下Java虚拟机内存的各个区域,以及这些区域的作用.服务对象以及其中可能产生的问题,作为大家的面试宝典. 首先我们来看一下J ...

  4. java虚拟机内存区域理解

    java虚拟机有的区域随着虚拟机进程的启动而存在, 有的区域依赖用户线程的启动和结束而建立和销毁. 程序计数器:为了线程切换后能恢复到正确的执行位置,每个线程都有一个独立的程序计数器.(针对java方 ...

  5. java虚拟机内存区域的划分以及作用详解

    序言 为什么有时候学着学着会突然之间觉得一切度是那么无趣,男的每个月也有那么几天难道?哈哈,不然是什么,我还是要坚持,可以做少一点,但是不能什么度不做.总会过去的,加油 --WH 一.运行时数据区 什 ...

  6. Java虚拟机内存区域堆(heap)的管理

    在上一节中Java 出现内存溢出的定位以及解决方案 中对于Java虚拟机栈以及方法区的内存出现的异常以及处理方式进行了解析,由于Java虚拟机对于堆的管理十分复杂,并且Java虚拟机中最基本的内存区域 ...

  7. 【四】Java虚拟机内存区域初识

     一.线程独占区  1.程序计数器 程序计数器是一块处于线程独占区较小的内存空间,它可以看是当前线程所执行的字节码的行号指示器. 如果线程执行的是Java方法,这个计数器记录的是正在执行的虚拟机字节码 ...

  8. 一、java虚拟机内存区域

    内存区域 java虚拟机在java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.java虚拟机规范将JVM管理的内存分为:程序计数器.本地方法栈.Java虚拟机栈.方法区.Java堆.如下 ...

  9. Java虚拟机内存区域划分

    Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途.以及创建和销毁的时间.有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结 ...

随机推荐

  1. C#中的is和as

    is检查一个对象是否兼容于指定的类型,不返回Boolean值.注意is操作符永远不会抛异常.is操作符通常这样使用: if(o is Employee) { Employee e=(Employee) ...

  2. Backbone.js 和 Nodejs 的一些共同点搞不清楚

    前端方面 我用 Backbone.js 做过前端的开发,印象里就是后端按模型对象的属性把 JSON 数据发过来,我写在模板里渲染就好了 模板加载( underscore.js ) 建立模型 渲染视图 ...

  3. 解决Apache Web Server的几个错误

    一.安装好Apache后服务里没有Apache服务 在命令行进入安装apache的bin目录下,输入命令 httpd.exe -k install -n Apache2.4 二.Apache web ...

  4. 图片和base64相互转化

    # -*- coding: utf-8 -*- import urllib2 as ulb import base64 #用urllib2库链接网络图像 response=ulb.Request('h ...

  5. Java 读书笔记 (九) 运算符

    短路逻辑运算符 && 当使用与逻辑运算符时,在两个操作数都为true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断第二个操作了. ...

  6. session.go

    package {             so.ttl = ttl         }     } } // WithContext assigns a context to the session ...

  7. bzoj 4556 字符串

    后缀数组,暴力硬跑 贼快 #include<cstdio> #include<cstring> #include<iostream> #include<alg ...

  8. bzoj 2588 树上主席树

    主席树上树,对于每个节点,继承其父亲的,最后跑f[x]+f[y]-f[lca]-f[fa[lca]] 去重竟然要减一,我竟然不知道?? #include<cstdio> #include& ...

  9. BZOJ_2238_Mst_树剖+线段树

    BZOJ_2238_Mst_树剖+线段树 Description 给出一个N个点M条边的无向带权图,以及Q个询问,每次询问在图中删掉一条边后图的最小生成树.(各询问间独立,每次询问不对之后的询问产生影 ...

  10. 作为比湖南还火的python网红,零基础要如何系统的开始学习呢?

    Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定.它包含了一组完善而且容易理 ...