参考:深入理解Java虚拟机 周志明

![](http://images2015.cnblogs.com/blog/575312/201705/575312-20170531203010274-1840860764.png)

方法区

- 线程共享,加载类信息、常量、静态变量、JIT后的代码,别名Non-Heap
- 对于HotSpot,此又称永久代,其他JVM并不存在这个概念
- 不需要连续内存空间,可扩,可不GC,会抛出OutOfMemoryError

虚拟机栈

- 线程私有,描述方法执行内存模型,栈帧,方法执行对应一个栈帧入栈到出栈
- 局部变量表,基本类型,对象指针,编译期间完成分配
- 栈深度超过虚拟机深度-->StackOverflowError
- 虚拟机栈动态扩展无法申请足够内存时-->OutOfMemoryError

本地方法栈

- 与虚拟机栈类似,本地方法区为Native方法服务

- 线程共享,所有对象实例和数组均在此,GC主要区域,也叫GC堆,会抛出OutOfMemoryError
- 可以处于物理上不连续内存空间

程序计数器

- 小内存,当前线程字节码行号指示器,线程私有,无OutOfMemoryError区域

其他

- 运行时常量池
- 方法区一部分,存放Class文件编译时生成的各种字面量和符号引用,类加载后存放在此
- 动态性,如String的intern()-->如果池中有此字符串则返回代表该字符串的对象,否则在池中添加此String对象,并返回引用
- 直接内存
- JDK1.4引入基于通道Channel与缓冲区Buffer的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过DirectByteBuffer对象作为这块内存的引用
- 反射调用Unsafe实例allocateMemory()分配内存,只有rt.jar可直接访问,所以反射=。=

设置

 -Xms //堆最小值
-Xmx //堆最大值
-XX:+HeapDumpOnOutOfMemoryErro //内存溢出时Dump出内存堆 -Xss //栈容量设置 -XX:PermSize //方法区最小值
-XX:MaxPermSize //方法区最大值 -XX:MaxDirectMemorySize //直接内存,默认与-Xmx堆最大值一致

Java内存区域与内存异常的更多相关文章

  1. 深入理解java虚拟机系列(一):java内存区域与内存溢出异常

    文章主要是阅读<深入理解java虚拟机:JVM高级特性与最佳实践>第二章:Java内存区域与内存溢出异常 的一些笔记以及概括. 好了開始.假设有什么错误或者遗漏,欢迎指出. 一.概述 先上 ...

  2. 《深入理解java虚拟机》第二章 Java内存区域与内存溢出异常

    第二章 Java内存区域与内存溢出异常 2.2 运行时数据区域  

  3. 深入了解Java虚拟机(1)java内存区域与内存溢出异常

    java内存区域与内存溢出异常 一.运行时数据区域 1.程序计数器:线程私有,用于存储当前所执行的指令位置 2.Java虚拟机栈:线程私有,描叙Java方法执行模型:执行方法时都会创建一个栈帧,存储局 ...

  4. 深入理解java虚拟机-第二章:java内存区域与内存泄露异常

    2.1概述: java将内存的管理(主要是回收工作),交由jvm管理,确实很省事,但是一点jvm因内存出现问题,排查起来将会很困难,为了能够成为独当一面的大牛呢,自然要了解vm是怎么去使用内存的. 2 ...

  5. 深入理解java虚拟机---->java内存区域与内存溢出异常

    2. java内存区域于内存溢出异常 2.1 概述: 对于C/C++而言,内存管理具有最高的权利,既拥有每一个对象的“所有权”,又担负着每一个对象生命开始到结束的维护责任. 对于java而言,则把内存 ...

  6. 第二章Java内存区域与内存溢出异常

    第二章 Java内存区域与内存溢出异常 一.概述 对与Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每个new操作去写delete/free代码,不容易出现内存泄露和内存溢出问 题, ...

  7. 2.1 自动内存管理机制--Java内存区域与内存溢出异常

    自动内存管理机制 第二章.Java内存区域与内存溢出异常 [虚拟机中内存如何划分,以及哪部分区域.什么样代码和操作会导致内存溢出.各区域内存溢出的原因] 一.运行时数据区域 Java虚拟机所管理的内存 ...

  8. 虚拟机--第二章java内存区域与内存溢出异常--(抄书)

    这是本人阅读周志明老师的<深入理解Java虚拟机>第二版抄写的,有很多省略,不适合直接阅读,需要阅读请出门左转淘宝,右转京东,支持周老师(侵权请联系删除) 第二章java内存区域与内存溢出 ...

  9. 深入理解Java虚拟机之Java内存区域与内存溢出异常

    Java内存区域与内存溢出异常 运行时数据区域 程序计数器 用于记录从内存执行的下一条指令的地址,线程私有的一小块内存,也是唯一不会报出OOM异常的区域 Java虚拟机栈 Java虚拟机栈(Java ...

  10. 深入理解Java虚拟机之图解Java内存区域与内存溢出异常

    Java内存区域与内存溢出异常 运行时数据区域 程序计数器 用于记录从内存执行的下一条指令的地址,线程私有的一小块内存,也是唯一不会报出OOM异常的区域 Java虚拟机栈 Java虚拟机栈(Java ...

随机推荐

  1. Spring常用注解用法总结

    转自http://www.cnblogs.com/leskang/p/5445698.html 1.@Controller 在SpringMVC 中,控制器Controller 负责处理由Dispat ...

  2. GraphSAGE 代码解析(四) - models.py

    原创文章-转载请注明出处哦.其他部分内容参见以下链接- GraphSAGE 代码解析(一) - unsupervised_train.py GraphSAGE 代码解析(二) - layers.py ...

  3. kaldi学习 - 一脚本流学习工具使用

    目录 yesno训练 先给出整体脚本如下: 分块详解 建立解码脚本 kaldi中脚本东西比较多,一层嵌一层,不易阅读. 本文以yesno为例,直接使用kaldi编译的工具,书写简易训练步骤,方便学习k ...

  4. CentOS安装Harbor

    CentOS版本:7.4 Harbor版本:1.5.0 Docker版本:1.12.6 Docker Compose版本:1.21.2 一.安装Harbor(http方式,80端口) 1.安装Dock ...

  5. multi-tap

    multi-tap又称 multi-press . 是在手机,或者电视遥控上的keypad定义,有如下2类标准: 1. ITU-T E.161 2.T9 使用举例如下: Consider a typi ...

  6. 201621123033 《Java程序设计》第14周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 2. 使用数据库技术改造你的系统 2.1 简述如何使用数据库技术改造你的系统.要建立什么表?截图你的表设计. 2 ...

  7. Linux挂载Win共享文件夹_VmwareTools

  8. Storm ui 显示异常

    今天安装storm集群的时候,各个进程也都起来,却发现Storm ui界面下无法观察Storm集群的状态 有很多地方处理不当都会造成这种现象: 1.storm.yaml配置不当 2.防火墙的问题 3. ...

  9. enter & keypress

    enter & keypress https://stackoverflow.com/questions/905222/enter-key-press-event-in-javascript ...

  10. [剑指Offer] 12.数值的整数次方

    [思路1]递归 class Solution { public: double Power(double base, int exponent) { ){ /base; exponent = -exp ...