zoukankan      html  css  js  c++  java
  • JVM 运行时数据区总结 栈 堆 堆大小配置总结

    1. 程序计数器

      线程私有

      当前线程所执行的字节码的行号指示器

    2. 虚拟机栈

      线程私有

      存:Java方法(局部变量表(基本数据类型)、操作数栈、动态链栈、方法出口)

      StackOverflowError 栈深度大于虚拟机所允许的深度

      OutOfMemoryError 无法满足内存分配

    3. 本地方法栈

      线程私有

      存:Native方法

      与虚拟机栈相似

      StackOverflowError 栈深度大于虚拟机所允许的深度

      OutOfMemoryError 无法满足内存分配

    4. 堆 

      线程共享

      对象实例,新生代 老年代

      堆大小设置

      -Xmx 设置JVM最大可用内存

      -Xms 设置JVM初始堆大小

      -Xmn 设置新生代大小。持久代一般固定大小为64m,所以增大新生代后,将会减小老年代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8

      -Xss  设置每个线程的堆栈大小

      整个JVM内存大小=新生代大小 +老年代大小 + 持久代大小。

      -XX:NewSize=n: 设置新生代大小

      -XX:NewRatio=n: 设置新生代和老年代的比值。如:为3,表示新生代与老年代比值为1:3,新生代占整个新生代老年代和的1/4

      -XX:SurvivorRatio=n: 新生代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5

      新生代:Eden(Eden:乐园)空间、From SurvivorSurvivor:幸存者空间、To Survivor空间

      -XX:MaxTenuringThreshold=n:设置垃圾最大年龄。如果设置为0的话,则新生代对象不经过Survivor区,直接进入老年代。对于老年代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则新生代对象会在Survivor区进行多次复制,这样可以增加对象在新生代的存活时间,增加在新生代即被回收的概论。

      -XX:MaxPermSize=n: 设置持久代大小

      OutOfMemoryError 无法满足内存分配

      参考:JVM调优总结 -Xms -Xmx -Xmn -Xss

    5. 方法区

      线程共享 Non-Heap 非堆 熟称“持久代”

      存:已被加载的类信息、常量、静态变量、即时编译器编译后的代码等数据

      -XX:MaxPermSize=n:  设置持久代大小

      OutOfMemoryError 无法满足内存分配

    5.1 运行时常量池 

      Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。

      String.intern()方法

      OutOfMemoryError 无法满足内存分配

    6. 直接内存

      JDK1.4新加入了NIO(NIO参考 Java NIO 学习总结 学习手册),引入了一中基于通道(Channel)与缓冲区(Buffer)的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆中的DirectByteBuffer对象作为这块内存的引用进行操作。

      本机直接内存的分配不会受到Java堆大小的限制,会受到本机总内存(包括RAM以及SWAP区或者分页文件)大小以及处理器寻址空间的限制。

      OutOfMemoryError 无法满足内存分配

  • 相关阅读:
    发一段非万能的sql分页代码
    手机版的首页不能翻页,用的是UC7.1
    关于Enterprise library logging中一个没搞明白的东西,希望有大大们进来帮忙释疑一下, THKS
    关于CodeSmith主模板与子模板同时从一个基类继承后的参数传值问题(提供模板下载)
    golang 去除字符串首尾空格
    构建一个SDK的打印信息
    PeekMessage抓取消息,如何把每个消息都获取到呢?
    DirectDraw学习 之 入门(二)
    20111121 —— wince6.0 BSP 里面加了 locale 后编译 failed 之解决办法
    DirectDraw学习 之 编译自带的sample代码
  • 原文地址:https://www.cnblogs.com/loveincode/p/JVM_Run_time_data_area_summary.html
Copyright © 2011-2022 走看看