文档章节

jvm学习笔记

dyzhou
 dyzhou
发布于 2015/08/21 18:10
字数 1011
阅读 139
收藏 16

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内存模型

© 著作权归作者所有

共有 人打赏支持
dyzhou
粉丝 6
博文 8
码字总数 3684
作品 0
合肥
私信 提问
给大家分享一个JAVA技术大牛的课程笔记

目前,Java语言已经广泛应用于生活中的各个领域,无论是网络编程还是数据库编程,甚至是web开发都有Java语言的身影 很多小伙伴想学习java却布置从何学起,现在给大家分享一个JAVA大神课程笔记...

dadaxiaoxiao
2015/12/31
304
1
111 多线程JUC包下代码分析

Java多线程系列目录(共43篇) AtomicLongFieldUpdater:通过反射+CAS实现对传入对象的指定long字段实现类似AtomicLong的操作 http://www.cnblogs.com/skywang12345/p/javathreadscategory.ht...

素雷
2017/10/31
0
0
一份关于 Java、Kotlin 与 Android 的学习笔记

JavaKotlinAndroidLearn 这是一份关于 Java 、Kotlin 、Android 的学习笔记,既包含对基础知识点的介绍,也包含对一些重要知识点的源码解析,笔记的大纲如下所示: Java 重拾Java(0)-基础知...

叶应是叶
2018/08/08
0
0
全新互联网Java后端开发技术思维导图

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/t4i2b10X4c22nF6A/article/details/82714797 图文里的技术如何学习,有没有免费资料? 对Java的技术,架构技术...

JAVA高级架构v
2018/09/15
0
0
BAT等大厂Android面试书单和知识点清单

java是Android开发的基础,在BAT的初面中,会涉及到比较多的java基础知识,所以比较重要,下面我介绍的书籍内容是由浅到深。 1.Thinking in java:这本书被称为Java的三大圣经之一,虽然书比...

android自学
2018/07/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

开始看《JSP&Servlet学习笔记》

1:WEB应用简介。其中1.2.1对Web容器的工作流程写得不错 2:编写Servlet。搞清楚了Java的Web目录结构,以及Web.xml的一些配置作用。特别是讲了@WebServlet标签 3:请求与响应。更细致的讲了从...

max佩恩
34分钟前
0
0
mysql分区功能详细介绍,以及实例

一,什么是数据库分区 前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例。mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可...

吴伟祥
35分钟前
0
0
SQL语句查询

1.1 排序 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。 格式: SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC; ASC 升序 (默认) DESC 降序 1.查询所有商品信息,...

stars永恒
51分钟前
2
0
IntelliJ IDEA 第一个 Scala 程序

IntelliJ 安装完成 Scala 插件后,你需要尝试使用 IntelliJ 来创建并且运行第一个程序。 通常这个程序只是简单的输出 Hello World。 创建一个新工程 在文件下面选择新建,然后选择创建工程。...

honeymose
56分钟前
2
0
csapp 习题 - 如何实现异或 exclusive-or

阅读 csapp v3 时,练习题 2.13 很有意思。练习题描述如下。 位设置是对于参数 mask 中每一个为 1 的位,那么参数 x 中相应位则被设置为 1 ;位清除是对于参数 mask 中每一个为 1 的位,那么...

ylme
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部