• 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. OAthe2 Login use OkHttpClient and OAuth2RestTemplate

    http://samchu.logdown.com/posts/1437422-oathe2-login-use-okhttpclient-and-oauth2resttemplate?utm_sou ...

  2. n级阶梯,每次走一步或两步,问最多有多少种走法 二叉树实现

    NodeTree类 public class NodeTree { private int num; private NodeTree left; private NodeTree right; pu ...

  3. timeCache.go

    package blog4go import ( "sync" "time" ) const ( // PrefixTimeFormat  时间格式前缀 Pre ...

  4. C++中memset()函数的作用

    memset()函数可以对大内存的分配进行很方便的操作(初始化),所谓“初始化”,当然是指将你定义的变量或申请的空间赋予你所期望的值, 例如语句int i=0;就表明定义了一个变量i,并初始化为0: ...

  5. [JSOI2008]星球大战starwar BZOJ1015

    并查集 正序处理时间复杂度为n^2,考虑逆序处理,这样,时间复杂度从n^2降为nlogn 附上代码: #include <cstdio> #include <algorithm> ...

  6. Spring mvc 上传进度条实现

    以下的仅仅是学习而已,记录以下笔记 1 springmvc 进度条,要实现ProgressListener接口,实现方法update(long readLength, long contextLeng ...

  7. 招商信诺生产jvm 配置和自己的eclipse jdk配置

    command=/usr/bin/java -jar -Xms512m -Xmx512m -Xss256K -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+Us ...

  8. windows 7安装Fiddler抓HTTPS请求的解决办法

    一.下载安装Fiddler,网上随意一搜就可找到安装软件 二.打开已经安装的fiddler,本人的安装目录:D:\AutoTest\fiddle\Fiddler2 三.打开的页面如图: 三.点击too ...

  9. 终于将SAP系统完全配置通过了

    花了近10天的时间,每天晚上加班加点,终于将SAP S4 1610 IDES系统从零到有,从头到尾配置一遍.目前只启用了一家模拟公司,从基础数据的设置,到销售订单开立(含按单按库需求),跑MRP需求, ...

  10. 《HelloGitHub》第 26 期

    公告 五月初 hellogithub.com 网站做了优化和试错.因为我个人能力原因,导致这段时间网站出现了间断性不能访问,现在问题已经修复.多谢大家的支持.理解和反馈. 本期新增了"星图& ...