@chenxuxiong
2016-05-31T15:07:33.000000Z
字数 1609
阅读 1361
JAVA虚拟机
程序计数器:线程之间就要根据时间片轮询抢夺CPU时间资源。因此每个线程有要有一个独立的程序计数器,记录下一条要运行的指令。简单的讲就是当前线程所执行的字节码的行号指示器,是线程私有的内存区域。如果执行的是JAVA方法,计数器记录正在执行的java字节码地址,如果执行的是native方法,则计数器为空。
Java虚拟机栈:线程私有,存放局部变量表(基本数据类型,对象引用),操作数栈,动态链接,方法出口
Java堆:分配对象实例,数组,线程共享
方法区:存储被加载的类信息,常量,静态变量,编译后的代码
运行时常量池:存放编译期生成的字面量和符号引用
本地方法栈
直接内存 不是虚拟机运行时数据区的一部分,也不是JVM的内存区域,但使用到NIO可能会导致OutOfMemoryError.
新生代,老年代,永久代
Eden, from survival,to survival;Tenured;Perm/Metaspace
8:1:1
与垃圾回收相关的JVM参数:
-Xms / -Xmx — 堆的初始大小 / 堆的最大大小
-Xmn — 堆中年轻代的大小
-XX:-DisableExplicitGC — 让System.gc()不产生任何作用
-XX:+PrintGCDetails — 打印GC的细节
-XX:+PrintGCDateStamps — 打印GC操作的时间戳
-XX:NewSize / XX:MaxNewSize — 设置新生代大小/新生代最大大小
-XX:NewRatio — 可以设置老生代和新生代的比例
-XX:PrintTenuringDistribution — 设置每次新生代GC后输出幸存者乐园中对象年龄的分布
-XX:InitialTenuringThreshold / -XX:MaxTenuringThreshold:设置老年代阀值的初始值和最大值
-XX:TargetSurvivorRatio:设置幸存区的目标使用率