您的位置:首页 > 其它

jvm学习笔记

2015-08-21 18:10 232 查看
java堆相关参数:
起始值:-Xms
最大值:-Xmx
新生代分配内存设置:-Xmn

内存溢出快照设置:-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=${目录}
-XX:+PrintGCDetails: 产生gc详细日志;
-XX:SurvivorRatio= :设置eden区和survivor的大小比例

实例:-verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8
说明:打印gc过程详细日志:设置堆最小内存20M,堆最大内存20M,设置新生代内存10M,打印gc详细日志,设置eden区和survivor区 内存比例为8:1

-XX:PretenureSizeThreshold:设置当对象大于该值时直接分配到老年代,防止在eden区发生大量的内存复制。

-XX:+PrintFlagsFinal -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions 打印出所有jvm启动参数

-Xms:初始堆大小
-Xmx:最大堆大小
-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
-XX:MaxPermSize=n:设置持久代大小
收集器设置
-XX:+UseSerialGC:设置串行收集器
-XX:+UseParallelGC:设置并行收集器
-XX:+UseParalledlOldGC:设置并行年老代收集器
-XX:+UseConcMarkSweepGC:设置并发收集器
垃圾回收统计信息
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename
并行收集器设置
-XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数。并行收集线程数。
-XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间
-XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)

JVM给了三种选择:串行收集器、并行收集器、并发收集器

class 加载七个阶段:

加载:1.通过类的全限定名获取定义此类的二进制流(类加载器实现);2.将字节流所代表的静态存储结构转化为方法区的运行时数据结构;3.生成java.lang.Class对象,作为方法区这个类的各种数据访问入口;

验证:连接的第一步,保证class文件字节流符合虚拟机要求;

准备:为类变量分配内存,设置类变量初始值,在方法区中进行分配;

解析:将常量池内的符号引用替换为直接引用,包括类或接口解析、方法解析、字段解析;

初始化:真正开始执行代码,clinit()方法执行,父类优先;clinit方法由编译器自动收集类中所有类变量的赋值和static{}块合并产生

类加载器:
启动类加载器:bootstrap classloader,加载java_home\lib下jar包,根据名称加载,或加载-XBootclasspath参数所指定路径下jar包;
扩展类加载器 :加载java_home\lib\ext下的类;
应用程序类加载器(又叫做系统类加载器):负载加载用户类路径上所指定的类库

双亲委派模型:如果一个类加载器收到了类加载请求,首先不会自己尝试加载这个类,而是把这个请求委派给父类加载器去完成,因此所有的请求都会被传递到顶层类加载器中;

JAVA对象内存结构
对象在内存中存储布局主要包含3个部分:
对象头:包含2部分数据:1、对象自身运行时数据,如hashCode、GC分代年龄、锁状态标识、线程持有的锁等,长多为32bit(32位操作系统,未开启指针压缩)或64bit(64位操作系统);2、类元数据对象引用;
实例数据
对齐填充

java内存结构与GC


java执行引擎

java内存模型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: