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 无法满足内存分配

  • 相关阅读:
    Android开发-MediaRecorder使用
    ScrollView嵌套ListView只显示一行的解决方法
    Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它)
    Dialog向Activity传递数据
    Android WebView使用深入浅出
    Android四大基本组件介绍与生命周期
    Java泛型的应用
    Java final关键字特点
    Java static关键字特点
    Java匿名内部类
  • 原文地址:https://www.cnblogs.com/loveincode/p/JVM_Run_time_data_area_summary.html
Copyright © 2011-2022 走看看