1.程序计数器
  • 作用-较小的内存空间,用于存储当前线程所执行的字节码的行号
  • 特性-每条线程有需要一个独立的程序计数器,各线程间互不影响,独立存储,称为"线程私有"的内存
     2.Java虚拟机栈-程序员口中的"栈"
  • 作用-描述Java方法执行的内存模型,每个方法执行时会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息
  • 存储内容-局部变量表(8种基本数据类型、对象引用(指向对象地址的指针)、returnAddress类型(指向一条字节码指令的地址)),其所需的内存空间在编译期间完成分配
  • 特性-线程私有,其生命周期与线程相同
  • 异常-①线程请求栈深度大于虚拟机允许的深度-StackOverflow ②虚拟机栈动态扩展时无法申请到足够内存-OutOfMemory
     3.本地方法栈
  • 作用-与虚拟机栈类似,存储Native方法的相关信息
  • 其他-与虚拟机栈相同,线程私有
     4.Java堆-程序员口中的"堆"
  • 作用-存储对象实例,为所有对象实例及数组分配内存(注:随着技术发展,栈上分配、标量替换等优化技术使得对象实例不一定必须要在堆上分配)
  • 特性-所有线程共享的内存区域,在虚拟机启动时创建,其内存空间物理上可以不连续、逻辑必须联系
  • 异常-堆中没有足够内存完成实例分配,且堆也无法再扩展时-OutOfMemory
  • 注:GC采用分代收集算法,回收的主要目标为Java堆与方法区
     5.方法区
  • 作用-存储已被虚拟机加载的类信息、常量、静态变量、即时编译器(把源代码编译成和本地机器平台相关的机器语言,叫即时编译,即时编译器因为产生的是本地机器的机器码,能直接执行)编译后的代码等数据
  • 特性-所有线程共享的内存区域
     6.运行时常量池
  • 作用-存储编译期生成的各种字面量(int a=1  其中a为变量,1为字面量,字面量即能直接看出的值)和符号引用、翻译出来的直接引用
  • 特性-其属于方法区的一部分,所有线程共享
  • 特殊点-常量并不是一定只有编译期才能产生,运行期间也可能将新的常量放入池中,如String类的intern()方法
     7.直接内存
  • 作用-NIO类(New Input/Output),引入了基于通道(Channel)与缓冲区(Buffer)的I/O方式,使其可以使用Native函数库直接分配堆外内存,通过一个存储在Java堆中的DirectbyteBuffer对象作为这块内存的引用进行操作,避免了Java堆和Native堆中来回复制程序
  • 特性-不属于Java虚拟机内定义的内存区域
  • 示例代码-通过Channel进行复制,可以有效提高复制效率

     fileInputStream = new FileInputStream(sourceFile);
     fileOutputStream = new FileOutputStream(destFile);
     in = fileInputStream.getChannel();
     out = fileOutputStream.getChannel();
     in.transferTo(0, in.size(), out);

《深入理解Java虚拟机》学习笔记1-内存数据区域的更多相关文章

  1. 深入理解java虚拟机学习笔记(一)JVM内存模型

    上周末搬家后,家里的宽带一直没弄好,跟电信客服反映了N遍了终于约了个师傅明天早上来迁移宽带,可以结束一个多星期没网的痛苦日子了.这段时间也是各种忙,都一个星期没更新博客了,再不写之前那种状态和激情都要 ...

  2. 深入理解Java虚拟机学习笔记(一)-----Java内存区域

    一 概述 对于 Java 程序员来说,在虚拟机自动内存管理机制下,不再需要像C/C++程序开发程序员这样为内一个 new 操作去写对应的 delete/free 操作,不容易出现内存泄漏和内存溢出问题 ...

  3. 深入理解java虚拟机学习笔记(二)垃圾回收策略

    上篇文章介绍了JVM内存模型的相关知识,其实还有些内容可以更深入的介绍下,比如运行时常量池的动态插入,直接内存等,后期抽空再完善下上篇博客,今天来介绍下JVM中的一些垃圾回收策略.        一. ...

  4. 深入理解java虚拟机读书笔记1--java内存区域

    Java在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途.创建和销毁的时间,有一些是随虚拟机的启动而创建,随虚拟机的退出而销毁,有些则是与线程一一对应,随 ...

  5. 深入理解Java虚拟机 - 学习笔记 1

    Java内存区域 程序计数器 (Program Counter Register) 是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器.在虚拟机的概念模型里,字节码解释器工作时就是通过 ...

  6. 转载: Java虚拟机:运行时内存数据区域、对象内存分配与访问

    转载:  https://blog.csdn.net/a745233700/article/details/80291694  (虽然大部分内容都其实是深入理解jvm虚拟机这本书里的,不过整理的很牛逼 ...

  7. 深入理解Java虚拟机一:运行时数据区域

    根据<Java虚拟机规范(第2版)>的规定,Java虚拟机管理的内存包括下图几个运行时数据区域: 1.程序计数器        程序计数器(Program Counter Register ...

  8. 深入理解Java虚拟机学习笔记(二)-----垃圾收集器与内存分配策略

    写在前面 本节常见面试题: 如何判断对象是否死亡(两种方法). 简单的介绍一下强引用.软引用.弱引用.虚引用(虚引用与软引用和弱引用的区别.使用软引用能带来的好处). 如何判断一个常量是废弃常量 如何 ...

  9. 深入理解Java虚拟机读书笔记8----Java内存模型与线程

    八 Java内存模型与线程   1 Java内存模型     ---主要目标:定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节.     ---此处的变量和J ...

  10. 深入理解Java虚拟机读书笔记1----Java内存区域与HotSpot虚拟机对象

    一 Java内存区域与HotSpot虚拟机对象 1 Java技术体系.JDK.JRE?     Java技术体系包括:         · Java程序设计语言:         · 各种硬件平台上的 ...

随机推荐

  1. 切换“使用被动式FTP”

    -- 本文版权归博客园和dige1993所有,访问作者博客 -- 最近用Dreamweaver做了几个网页,打算上传到远程FTP服务器的时候,同步文件和连接FTP服务器时总是超时出错,一直处在&quo ...

  2. 大数据慎行,数据管理要落实到KPI

    近年来,"大数据"一词被IT和互联网行业广泛提及,但真正落到实处的案例没有多少,大数据量支撑.数据挖掘技术.非结构化数据是阻碍的主要原因.大多数企业的信息化并没有达到到成熟水平,关 ...

  3. PHP 原创视频教程-网站开发新手视频教程

    PHP 原创视频教程-网站开发新手视频教程 有偿招徒弟,,视频免费提供. 本视频教程,面向的是毫无经验的新手,快速上手的. 第一次做视频做的不好的,请各位看官多多包含. 第一部分,HTML 视频教程 ...

  4. [LeetCode] Valid Perfect Square 检验完全平方数

    Given a positive integer num, write a function which returns True if num is a perfect square else Fa ...

  5. [LeetCode] Remove Invalid Parentheses 移除非法括号

    Remove the minimum number of invalid parentheses in order to make the input string valid. Return all ...

  6. websocket初探

    本文尚未完成,在此只写一些句子,以后慢慢整理. 一.参数 IllegalArgumentException No payload parameter present on the method[mes ...

  7. 【BZOJ 4580】【Usaco2016 Open】248

    http://www.lydsy.com/JudgeOnline/problem.php?id=4580 区间dp,f(i,j)表示区间[i,j]全部合成一个数,这个数是多少. 可以归纳证明[i,j] ...

  8. 搭建web框架手册(一)

    昨天听完永康对EASYUI的介绍后终于明白了优秀的UI框架就是第一生产力,过去自己一直沉浸在后端代码中,完全忽视了前端的生产力交互,总觉得界面漂亮就是生产力,其实大错特错,真正的具有高效生产力的界面其 ...

  9. 一次xbuild编译失败的排查

    今天一个待上线服务测试完毕,需要构建CI,按照模板配置好包还原,xbuild编译,报错,错误信息如下: EtcdRegister.cs(8,15): error CS0234: The type or ...

  10. java学习笔记之正则表达式

    一般来说,正则表达式就是以某种方式来描述字符串,因此你可与说:"如果一个字符串符合有这些东西,那么它就是我正在找的东西. 1.要找一个数字,如果它可能有一个负号在最前面(可能没有,没有也是匹 ...