博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java虚拟机运行时的内存分类以及出现异常分析(jvm之一)
阅读量:6690 次
发布时间:2019-06-25

本文共 1659 字,大约阅读时间需要 5 分钟。

hot3.png

java虚拟机所管理的内存包括以下几个运行时数据区域:
方法区(Method Area):线程共享的,存放已被虚拟机记载的类信息、常量、静态变量等数据。“永久代(Permanent Generation)”
虚拟机栈(Virtual Machine Stacks):线程私有,生命周期跟线程相同;java方法执行时创建栈帧存放局部变量表(各种基本数据类型、对象引用等)、操作数栈、动态链接等信息。
本地方法栈(Native Method Stack)
堆(Heap):线程共享的;存放对象实例;垃圾收集器管理的主要区域即GC堆。
程序计数器(Program Counter Register):当前线程所执行的字节码的行号指示器。Java虚拟机多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,所以线程需要一个独立程序计数器。
OutOfMemoryError异常
1、Java堆(heap)溢出
java HeapOOM -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError
(将堆的最小值-Xms与最大值-Xmx参数设置为一样可以避免堆自动扩展;-XX:+HeapDumpOnOutOfMemoryError出现内存溢出异常时Dump出当前的内存堆转储快照以分析)
Java堆内存的OOM异常是实际应用中最常见的内存溢出溢出情况。异常信息:java.lang.OutOfMemoryError: Java heap space
解决简答思路:
       内存映像分析工具---内存泄漏(Memory Leak)or内存溢出(Memory Overflow)---if it is Memory Leak(泄漏对象到GC Roots的引用链) else Memory Overflow
       (内存对象还存活,检查虚拟机的堆参数-Xmx与-Xms,与机器物理内存对比是否可以调大)
2.虚拟机栈(VM stack)和本地方法栈(Native Method stack)溢出
-Xoss参数(设置本地方法栈大小) -Xss参数(设置栈容量) HotSpot虚拟机中并不区分本地方法栈和虚拟机栈
异常:
    栈深度(线程请求的)>虚拟机所允许的最大深度  : StackOverflowError
    虚拟机在扩展栈时无法申请到足够的内存空间    : OutOfMemoryError
当栈空间无法继续分配时,本质上只是对同一件事情的两种描述
java JavaVMStackSOF -Xss128k
在单个线程下,无论是那种异常,都抛出下面异常:
异常信息:java.lang.StackOverflowError
在多线程下,OOM异常与栈空间是否足够大无关,而是每个线程分配内存越大,反而容易常生OOM异常(OS分配内存给线程有限,分配到大栈容量越大,建立线程越小,建立
线程的时候越容易将剩下的内存耗尽)。开发多线程应用时建立过多多线程导致OOM异常,在不能减少线程数或更换64位虚拟机的情况下,减少最大堆和减少栈容量来换取更多线程。
3、运行时常量池(Runtime constant Pool)溢出
常量池分配在方法区(method Area)内, -XX:PermSize和-XX:MaxPermSize控制方法区大小,间接控制常量池。
java RuntimeConstantPoolOOM -XX:PermSize=10M -XX:MaxPermSize=10M
异常信息:java.lang.OutOfMemoryError: PermGen space
4、方法区溢出
方法区用于存放Class的相关信息,如类名、访问修饰符、常量池、字段描述、方法描述等
异常信息:java.lang.OutOfMemoryError: PermGen space
5、本机直接内存溢出(暂未碰过)

转载于:https://my.oschina.net/u/566829/blog/62249

你可能感兴趣的文章
[转]UML类图、关系及其JAVA代码
查看>>
PhotoShop算法原理解析系列 - 像素化---》碎片。
查看>>
设计模式之责任链模式
查看>>
在 Windows 下安装 Oracle 11g XE (Express Edition)
查看>>
php多态设计
查看>>
oracel SQL多表查询优化
查看>>
Spring-Context的注解实现依赖注入功能
查看>>
CSS格式化 CSS代码压缩工具
查看>>
Android的TextView使用Html来处理图片显示、字体样式、超链接等
查看>>
mvc伪静态<三> IIS配置
查看>>
.NET设计模式(12):外观模式(Façade Pattern)(转)
查看>>
【leetcode】Maximum Gap(hard)★
查看>>
Visual Studio中的lib的链接顺序
查看>>
Cacti安装详细步骤
查看>>
android自定义radiobutton样式文字颜色随选中状态而改变
查看>>
【CodeForces 604B】F - 一般水的题1-More Cowbe
查看>>
用JS获取地址栏参数的方法
查看>>
javascript中实现sleep函数
查看>>
ionic 001
查看>>
@params、@PathVariabl和@RequestParam用法与区别
查看>>