美文网首页
JVM浅析之二:运行时数据区域

JVM浅析之二:运行时数据区域

作者: 无为无悔 | 来源:发表于2016-09-16 15:52 被阅读0次

    下面从线程共享角度来说明JVM运行时数据区域

    线程私有:
    1. PC寄存器:存放线程内执行指令的地址

    2. JVM栈:存放基本类型局部变量、引用局部变量、方法参数、方法返回值以及异常表
      :java.lang.StackOverflowError通常是由于栈使用不当造成,例如递归造成栈深度过大,栈的分配空间本身不大,应谨慎使用,虽然可以-Xss自定义,但是正因为栈很小,所以才有相对于堆寻址快的特点

    3. 本地方法栈:与上一个栈不同的是,仅支持native方法

    线程共享:
    1. 堆:存放this以及new出来的实例,只存数组和引用类型,GC围绕着堆空间来运行,对未引用的实例进行销毁,释放空间以及将内存空间做紧凑处理
      :java.lang. OutOfMemoryError一般是由于堆使用不当造成,例如数组过于庞大,或集合内数据引用不当,内存无法释放,程序死循环等。可以通过命令-Xms和-Xmx对JVM进行调优,调的过大会造成空间的浪费,碎片过多,影响GC效率,调的过小会抛OOM异常或者造成GC过于频繁,所以应根据实际运行情况来调整

    2. 方法区:存放永久代,也叫非堆内存,存放类型信息(类名,属性名,方法名以及修饰符),即唯一的class实例和static变量以及常量。Hotspot将分代GC扩展到此位置,不过此区域GC执行频率非常低,一般只有full GC才会涉及

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

    相关文章

      网友评论

          本文标题:JVM浅析之二:运行时数据区域

          本文链接:https://www.haomeiwen.com/subject/sxkiettx.html