JVM管理的内存可以总体划分为两部分:Heap MemoryNative Memory。前者我们比较熟悉,是供Java应用程序使用的;后者也称为C-Heap,是供JVM自身进程使用的。Heap Memory及其内部各组成的大小可以通过JVM的一系列命令行参数来控制,在此不赘述。Native Memory没有相应的参数来控制大小,其大小依赖于操作系统进程的最大值(对于32位系统就是3~4G,各种系统的实现并不一样),以及生成的Java字节码大小、创建的线程数量、维持java对象的状态信息大小(用于GC)以及一些第三方的包,比如JDBC驱动使用的native内存。

Native Memory里存些什么?

1.管理java heap的状态数据(用于GC);
2.JNI调用,也就是Native Stack;
3.JIT(即使编译器)编译时使用Native Memory,并且JIT的输入(Java字节码)和输出(可执行代码)也都是保存在Native Memory;
4.NIO direct buffer。对于IBM JVM和Hotspot,都可以通过-XX:MaxDirectMemorySize来设置nio直接缓冲区的最大值。默认是64M。超过这个时,会按照32M自动增大。
5.对于IBM的JVM某些版本实现,类加载器和类信息都是保存在Native Memory中的。

DirectBuffer的好处

DirectBuffer访问更快,避免了从HeapBuffer还需要从java堆拷贝到本地堆,操作系统直接访问的是DirectBuffer。DirectBuffer对象的数据实际是保存在native heap中,但是引用保存在HeapBuffer中。
另外,DirectBuffer的引用是直接分配在堆得Old区的,因此其回收时机是在FullGC时。因此,需要避免频繁的分配DirectBuffer,这样很容易导致Native Memory溢出。

为什么会内存溢出?

简单理解java process memory = java heap + native memory。因此内存溢出时,首先要区分是堆内存溢出还是本地内存溢出。Native Memory本质上就是因为耗尽了进程地址空间。对于HotSpot JVM来书,不断的分配直接内存,会导致如下错误信息:Allocated 1953546760 bytes of native memory before running out

参考资料:

http://www.ibm.com/developerworks/library/j-nativememory-linux/index.html
http://www.techpaste.com/2012/07/steps-debugdiagnose-memory-memory-leaks-jvm/
https://sourcevirtues.wordpress.com/2013/01/14/java-heap-space-and-native-heap-problems/
http://www.theotherian.com/2013/08/understanding-javas-native-heap-or-c-heap.html
http://www.ibm.com/developerworks/library/l-kernel-memory-access/
http://www.ibm.com/developerworks/library/j-zerocopy/
http://en.wikipedia.org/wiki/Direct_memory_access

JVM Heap Memory和Native Memory相关推荐

  1. JVM 系列一:Native memory allocation 导致JVM Crash

    2019独角兽企业重金招聘Python工程师标准>>> JVM Crash抛出如下信息: # # There is insufficient memory for the Java ...

  2. Which one is faster: Java heap or native memory?

    2019独角兽企业重金招聘Python工程师标准>>> Which one is faster: Java heap or native memory? 11-29-2012 by  ...

  3. JVM中的本地内存追踪NMT(Native Memory Tracking)

    JVM中的本地内存追踪NMT(Native Memory Tracking) 1 概述 每当想起为什么Java应用程序会消耗比设置-Xms和-Xmx多的内存的时候,心中总是会有个问号.因为一些理由和优 ...

  4. Native memory allocation (mmap) failed to map 142606336 bytes for committing reserved memory.

    这里写链接内容 问题描述 Java程序运行过程中抛出java.lang.OutOfMemoryError: unable to create new native thread,如下所示: [java ...

  5. Linux下TomcatVM参数修改:Native memory allocation (mmap) failed to map 3221225472 bytes for committing res

    不可行的方法 最初我直接修改catalina.sh, 将JAVA_OPTS变量加上了 -server -Xms1G -Xmx1G -XX:+UserG1GC 最初看起来没啥问题,但是当服务器运行几天后 ...

  6. java native堆_Java Native Memory比堆更快吗?

    执行IO时,直接内存更快,因为它可以避免一个数据副本.但是,对于95%的申请,您不会注意到差异. 您可以将数据存储在直接内存中,但是它不会比存储数据POJO快. (或安全,可读或可维护)如果您担心GC ...

  7. Android 系统(30)---如何用DDMS分析native memory leak

    native程序如果发生内存问题,一般都比较难查,幸好DDMS有集成native memory leak(仅仅针对app,无法分析mediaserver等非app的进程)功能,通过DDMS可以观察na ...

  8. Native memory allocation (mmap) failed to map 6215958528 bytes for committing reserved memory

    今天突然发现es报错,无法正常启动,报错信息如下: Exception in thread "main" java.lang.RuntimeException: starting ...

  9. Native memory allocation (mmap) failed to map xxx bytes for committing reserved memory

    遇到问题 在服务器上运行 nexus 出现Native memory allocation (mmap) failed to map 838860800 bytes for committing re ...

最新文章

  1. linux下查看vnc端口_怎样查vnc端口,Linux下根据进程名怎样查端口
  2. java中utilities类_Java PHUtilities类代码示例
  3. Dataset之BDD100K:BDD100K数据集的简介、下载、使用方法之详细攻略
  4. python max和min函数的高级用法
  5. 在ABAP XSLT中调用ABAP类的方法
  6. 这个网盘下载60MB/s!PanDownload复活了!
  7. jwt与token+redis,哪种方案更好用?
  8. CSS3之Transform
  9. yytextview多种格式_iOS YYText的使用笔记一(YYTextView图文编辑器)
  10. matlab 价格统计,matlab中的金融数据统计
  11. 计算机应用技术爱岗敬业,高职专业人才培养方案(计算机应用技术).doc
  12. springboot+aop切点记录请求和响应信息
  13. Openstack Swift 原理、架构与 API 介绍
  14. 微信公众号开发自动回复的Python库——werobot
  15. 【Prufer Sequence +简单排列组合】bzoj 1005: [HNOI2008]明明的烦恼
  16. 松下plc安装序列号afpsgr7_《松下PLC 编程软件 FPWINGR7 操作手册 中文高清版》.pdf...
  17. 数学分析典型方法pdf下载_硬质合金刀具常识及使用方法 pdf下载 0700
  18. 人体颈椎神经分布图高清,颈椎部神经分布图高清
  19. 钓鱼比赛(百度笔试)
  20. 计算分辨率长宽比(等比例缩放)

热门文章

  1. 山水画名家推介——吴淮社
  2. 使用生成对抗网络进行端到端中国山水画创作(SAPGAN)
  3. 阿里发聚安全5.0 剑指互联网业务安全
  4. 移动WEB开发的几种布局
  5. 【转】删除mac启动台中的图标
  6. go项目打包交给k8s发布并管理步骤
  7. 直播营销系统搭建在公众号上有什么好处?
  8. USB-C正反插带PD快充USB3.0输出转HDMI/VGA音视频数据转换方案AG9321-MCQ
  9. 麻省理工算法导论(含教材、讲义、答案)
  10. 煮完饺子,汤用不用留?- 从小事看应用开发的细节