JVM 虚拟机 内存说明
Java虚拟机所管理的内存图:
1程序计数器:
该模块作用是记录线程执行字节码的位置,记录程序执行状态,以便该线程下次获得CPU时继续执行。程序里的每个线程程序计数器相互独立,互不影响,该内存区也称“线程私有”内存。
2、java虚拟机栈:
与程序计数器一样,java虚拟机栈也是“线程私有”,’每个方法执行的时候进入虚拟机栈,会创建一个栈帧,用于存储局部变量表,操作栈,动态链接,方法出口等信息,每一个方法从调用到执行完成,对应着每一个栈帧在虚拟机栈中从入栈到出栈的过程。
其中局部变量表包括java基本数据类型以及对象引用类型(reference)、returnAddress类型,该区域在代码编译时即确定占用内存大小,不会在执行方法中改变。
在虚拟机规范中,该区会产生两种异常,一种是线程请求的栈深度大于虚拟机所允许的深度会抛出StackOverFlowError 异常;当虚拟机动态拓展java虚拟机栈没有足够的内存时,会产生OutOfMemoryError异常
3、本地方法栈
本地方法栈跟java虚拟机栈类似,不过java虚拟机栈是为java方法(java字节码)服务,本地方法栈是为Native方法服务,本地方法栈也会抛出StackOverFlowError以及OutOfMemoryError异常。
4、Java堆
Java堆是java虚拟机占用内存最大一块,所有对象共享该内存区。该区域存放对象,所有实例对象以及数组都在该区域分配内存进行实例化(随着JTI编译器的发展与逃逸分析技术的成熟,该说法不再绝对)
Java堆是垃圾回收的主要区域,该区域实例化时可用是连续的内存区域或者分开的区域,只要逻辑上是连续的即可,如果该区域实例化的时候分配不到内存或成熟OutOfMemoryError异常。
5、方法区
方法区和java堆一样都是共享区域,用于存储虚拟机已经加载的类信息、常量、静态变量以及即时编译器编译的代码数据,虽然java虚拟机规范描述该区为java堆的逻辑部分,但是该区有一个别名“非堆”,应该区分为方法区。
6、运行常量池
运行时常量池是方法区的一部分。Class文件中除了有版本、字段、方法、描述等信息,还有一项常量池,用于存储编译期生成的各种字面量和符号引用。
7、直接内存
JVM 虚拟机 内存说明的更多相关文章
- 设置TOMCAT的JVM虚拟机内存大小
你知道如何设置TOMCAT的JVM虚拟机内存大小吗,这里和大家分享一下,JAVA程序启动时JVM都会分配一个初始内存和最大内存给这个应用程序.这个初始内存和最大内存在一定程度都会影响程序的性能. 设置 ...
- JVM 虚拟机内存深入探究
[<深入理解java虚拟机>-整理笔记] by lijun JVM虚拟机内存逻辑模型: 方法区(全局变量 静态数据 常量等) 线程共享 堆栈区(对象实例 数组数据 new generat ...
- java中JVM虚拟机内存模型详细说明
java中JVM虚拟机内存模型详细说明 2012-12-12 18:36:03| 分类: JAVA | 标签:java jvm 堆内存 虚拟机 |举报|字号 订阅 JVM的内部结构 ...
- jvm 虚拟机内存模型
来源:https://blog.csdn.net/A_zhenzhen/article/details/77917991?locationNum=8&fps=1 https://blog ...
- JVM虚拟机 - 内存
在JVM虚拟机中,内存部分大致可以分为以下几类: Heap:堆 NonHeap:非堆 CodeCache:缓存编辑后的机器码的内存区域 CompressedClassSpace:类压缩空间 MetaS ...
- 面试官:别的我不管,这个JVM虚拟机内存模型你必须知道
前言 说jvm的内存模型前先了解一下物理计算机的内存处理. 物理计算器上用户磁盘和cpu的交互,由于cpu读写速度速度远远大于磁盘的读写速度速度,所以有了内存(高速缓存区).但是随着cpu的发展,内存 ...
- JVM虚拟机内存模型以及GC机制
JAVA堆的描述如下: 内存由 Perm 和 Heap 组成. 其中 Heap = {Old + NEW = { Eden , from, to } } JVM内存模型中分两大块,一块是 NEW Ge ...
- JVM虚拟机内存溢出垃圾收集及类加载机制总结
1.Java内存区域与内存溢出异常 虚拟机栈:为虚拟机执行Java方法服务 本地方法栈:为虚拟机使用到的native方法服务. Java堆:是Java虚拟机所管理的内存中最大的一块,被所有线程共享的一 ...
- 对jvm虚拟机 内存溢出的思考
java内存溢出:当新产生对象时,新生代空间不够,导致无法申请到足够的空间,报内存溢出 内存泄漏:一些静态集合,静态常量没有被gc清理,越来越多,占用内存,最后导致无法申请到新的空间
随机推荐
- 一首诗,致亲爱的csdn
来自csdn的Rachel-Zhang姐姐 还记得--致亲爱的csdn 还记得你年轻时的摸样? 简单的文字,无瑕的脸庞. 现在的你,满脸风霜. 五粮液的广告,在我的文章中久久荡漾. 还记得当初的梦想? ...
- 描述性统计分析-用脚本将统计量函数批量化&分步骤逐一写出
计算各种描述性统计量函数脚本(myDescriptStat.R)如下: myDescriptStat <- function(x){ n <- length(x) #样本数据个数 m &l ...
- Win8下Visual Studio编译报“无法注册程序集***dll- 拒绝访问。请确保您正在以管理员身份运行应用程序。对注册表项”***“的访问被拒绝。”问题修正(转)
原来在Win7下Visual Studio跑的好好的程序,现在在Win8下编译报“无法注册程序集***dll- 拒绝访问.请确保您正在以管理员身份运行应用程序.对注册表项”***“的访问被拒绝.”的错 ...
- Linux进程管理
一.进程管理简介 进程是正在执行的程序或命令,每一个进程都是一个运行实体,都有自己的地址空间,并占用一定的系统资源. 进程管理的作用: 1.判断服务器的健康状态 2.查看系统中的所有进程 3.杀死进程 ...
- Ubuntu 修改 ssh 登录后的欢迎信息
/etc/update-motd.d/90-updates-available cd /etc/update-motd.d/ vi 10-help-text 修改或者注释掉里面的内容 vi 90-up ...
- ASP.NET MVC Jquery Validate 表单验证的多种方式
在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体验也会得到很大的提升.在开发过程中我们可以不借助 JS 库,自己去手写 JS ...
- spring 注解重复(防重复请求)
1.配置拦截器 spring-mvc.xml <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/ ...
- sql 查看某用户的连接数 以及 如何删除该用户的会话
--查看不同用户的连接数 select TERMINAL from v$session where username='username' and machine='machine' ---查询用户会 ...
- 基础笔记10(IO 1.7try-with-resource) 装饰模式
1.读写的类型分为字节流和字符流,字节流一般是视频音频其他所有的类型都可以. (非文档文件使用字符流易造成未知编码(?)错误) InputStream OutputStream 抽象类 fileInp ...
- Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...