文档章节

Java内存区域

小王穷遊
 小王穷遊
发布于 2017/09/11 22:52
字数 718
阅读 17
收藏 0

java虚拟机在运行时,讲内存划分为若干不同的数据区域,如下图所示:

 

 

 

 

  1. 程序计数器
            当前线程所执行的字节码的信号指示器。
            在虚拟机的概念模型中,字节码解释器,就是通过改变这个计数器的值,来选择下一条需要执行的字节码指令。分支、循环、跳转、异常处理、线程恢复等基础功能。
            为了线程切换后,能恢复到正确的执行位置,每个线程都独立拥有一个程序计数器。
            唯一的一个在Java虚拟机规范中,没有规定任何OutOfMemoryError情况的区域。
     
  2. 虚拟机栈
            Java方法执行的内存模型。
            每个方法执行时,都会创建一个栈帧,用于存储:局部变量表操作数栈动态链接方法出口等信息。
            局部变量表:基本数据类型、对象引用(起始地址、代表对象的句柄、对象的相关位置)、returnAddress。局部变量表所需的空间,在编译阶段就完全确定。
            Java虚拟机在这个区域规定了两种异常:StackOverFlowError、OutOfMemoryError。
     
  3. 本地方法栈
            Native方法执行的内存模型。
            Java虚拟机在这个区域规定了两种异常:StackOverFlowError、OutOfMemoryError。
     

  4.         所有的实例对象以及数组都要在堆上分配。但是随着JIT编译器的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些微妙的变化发生,所有的对象都分配在堆上也渐渐变得不是那么“绝对”了。
            线程共享。
            Java堆可以物理上不连续,只要逻辑上连续即可。
            异常:OutOfMemoryError
     
  5. 方法区
            用于存储已被虚拟机加载的类信息常量静态变量即时编译器编译后的代码等数据。
            线程共享。内存回收目标:常量池的回收、类型的卸载。
            异常:OutOfMemoryError
            运行时常量池:用于存放编译期生成的各种字面量和符号引用。运行期间也可能有新的常量加入,比如String类的intern()方法。
     
  6. 直接内存
            并不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域。
            NIO类,可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆中的DirectByteBuffer对象作为这块内存的引用进行操作。可以显著提升性能。避免了在Java堆和Native堆中来回复制数据。
            分配虚拟机内存时,需注意。各个内存区域总和,不能大于物理内存限制。

 

    注:参考《深入理解Java虚拟机》(第2版)

© 著作权归作者所有

共有 人打赏支持
小王穷遊
粉丝 8
博文 63
码字总数 20889
作品 0
成都
程序员
私信 提问

暂无文章

EOS docker开发环境

使用eos docker镜像是部署本地EOS开发环境的最轻松愉快的方法。使用官方提供的eos docker镜像,你可以快速建立一个eos开发环境,可以迅速启动开发节点和钱包服务器、创建账户、编写智能合约....

汇智网教程
今天
4
0
《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
今天
8
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
今天
12
0
CompletableFuture get方法一直阻塞或抛出TimeoutException

问题描述 最近刚刚上线的服务突然抛出大量的TimeoutException,查询后发现是使用了CompletableFuture,并且在执行future.get(5, TimeUnit.SECONDS);时抛出了TimeoutException异常,导致接口响...

xiaolyuh
今天
6
0
dubbo 搭建与使用

官网:http://dubbo.apache.org/en-us/ 一,安装监控中心(可以不安装) admin管理控制台,monitor监控中心 下载 bubbo ops 这个是新版的,需要node.js环境,我没有就用老版的了...

小兵胖胖
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部