程序运行时数据在JVM中的存放
2017-01-17 11:13
232 查看
1 JVM把管理的内存划分不同区域,一些区域随JVM启动而存在,一些区域依赖于用户线程的生命周期。
2 JVM管理的内存包括这几个区域:
程序计数器,Java虚拟机栈,本地方法栈。(线程单独使用)
Java堆,方法区,常量池,直接内存。(线程共享)
参考:
https://my.oschina.net/OutOfMemory/blog/299525 http://www.tuicool.com/articles/6vQ3am http://chenzhou123520.iteye.com/blog/1585224
2 JVM管理的内存包括这几个区域:
程序计数器,Java虚拟机栈,本地方法栈。(线程单独使用)
Java堆,方法区,常量池,直接内存。(线程共享)
程序计数器 Program counter register | 告诉JVM(?)当前线程下一条指令的地址 如果执行Native方法,则为空 此区域没有OutOfMemoryError,其他都有 |
虚拟机栈(JVM Stack) | 为JVM使用的java 字节码服务 方法在执行的时候创建一个stack frame 入栈,执行完后出。 stack frame存储了局部变量表,操作栈,动态链接,方法出口等。 局部变量表的内存空间在编译时完成,运行时不会变化。 如果请求的栈大于允许的,stackoverflowerror. 如果JVM Stack动态扩展时,申请不到了,outofmemoryerror |
本地方法栈(Native Method Stack) | 为JVM使用的native method服务 也会抛出outofmemoryerror和stackoverflowerror |
java heap堆 | 所有线程共享,jvm启动时创建 存放对象实例 GC管理的主要区域 -Xms -Xmx调节大小 会抛出outofmemoryerror |
java method area 方法区 | 存放被jvm加载的类 常量 静态变量 即时编译的代码 可以叫永久代 内存回收的对象是常量池的回收和类型的卸载。 方法区无法满足内存分配需求时,outofmemoryerror 包括运行时的常量池,存储符号引用和直接引用(一部分常量在编译时产生,如final String "abc",但是也可以动态产生,如intern()方法) |
直接内存 | 不会受到java heap限制,但是受到物理内存和寻址空间的限制 如果sum(各个区域内存)>物理内存,outofmemoryerror 可以提高性能,避免java heap 和 native heap中来回复制数据(NIO 类的使用) |
参考:
https://my.oschina.net/OutOfMemory/blog/299525 http://www.tuicool.com/articles/6vQ3am http://chenzhou123520.iteye.com/blog/1585224
相关文章推荐
- android的程序运行数据存放在哪里?
- java程序运行时的数据存放、内存分配
- 在windows应用程序中用ReportViewer显示程序运行中生成的DataSet中的数据
- 运行部署在Weblogic上的Web应用时,过一段时间程序就提示数据连接断了,重起Weblogic就好了。过一段时间又出现同样的问题。
- gdb调试程序之查看运行时数据【五】
- X86 32位机器程序运行中多字节数据内存使用
- [求解]在debug模式下程序正常运行(多次测试),运行模式下(正确数据)时常会抛异常,抛异常后事务也没有阻止,而继续执行操作?
- 运行部署在Weblogic上的Web应用时,过一段时间程序就提示数据连接断了,重起Weblogic就好了。过一段时间又出现同样的问题。
- JVM运行时数据区
- JVM学习笔记--Java运行时数据区域
- C#.NET通用权限管理在DB2数据库上运行的脚本参考 - 通过程序将数据导入到目标数据库中
- jvm的几个运行时数据区域
- 运行部署在Weblogic上的Web应用时,过一段时间程序就提示数据连接断了,重起Weblogic就好了。过一段时间又出现同样的问题。
- JAVA程序运行时保存数据的六个地方
- JVM 运行时数据区域
- 在例13.17的基础上,修改程序,将存放在c数组中的数据读入并显示出来
- 运行部署在Weblogic上的Web应用时,过一段时间程序就提示数据连接断了,重起Weblogic就好了。过一段时间又出现同样的问题。
- vs2008运行WEB程序时提示无法启动程序"http://localhost:12345/index.aspx".有更多数据可用
- 数据在程序中存放的位置[转]
- 用JavaScript编写JVM可成功运行Java程序