文档章节

jvm学习笔记

dyzhou
 dyzhou
发布于 2015/08/21 18:10
字数 1011
阅读 138
收藏 16
点赞 0
评论 0

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
合肥
111 多线程JUC包下代码分析

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

素雷
2017/10/31
0
0
2018年暑假第一周周总结报告

一眨眼,暑假第一周过去了。这一周大部分时间都是在学校度过的。在7月14日之前,我在学校宿舍待着,便开始刷我的网络课程。虽然这些课看上去不是太重要,但从中也学到了不少知识。 周一,我对...

寂天风
昨天
0
0
2018-3-29 Linux学习笔记

16.1 Tomcat介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 java程序写的网站用tomcat+jd...

XiaoluHuang
06/28
0
0
Java NIO ByteBuffer学习

深入理解Apache Mina (6)---- Java Nio ByteBuffer与Mina ByteBuffer的区别 http://chinaestone.iteye.com/blog/468138 DirectBuffer及内存泄漏 http://blog.csdn.net/zhouhl_cn/article/d......

mj4738
2012/10/15
0
0
Scala学习笔记(2)-基础语法

秉着简洁而不失完整的的原则,这章只把Scala主要语法和与Java不同的内容列出来,以后章节也如此,内容以简洁为主,太长了自己都被吓着了,也没耐心看下去。 1.Scala解释器使用,这里不做介绍...

山海经
2013/08/25
0
0
Scala学习笔记(1)-环境搭建

Scala是一种多范式的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。scala可以和java程序无缝拼接,因为scala文件编译后也是成为.class文件,并且在JVM上运行,有下下一代J...

山海经
2013/08/25
0
0
Struts2上传文件学习笔记

问题一:中文乱码 在使用Struts2实现文件上传时,若上传文件名为中文,则会在项目的发布目录中看上传文件名显示为乱码。解决办法很简单: 在struts.xml配置文件中配置: <constant name="st...

键盘小生
2012/06/10
0
1
12.5-全栈Java笔记:Java网络编程(三)

上节回顾:在学习了Socket在建立客户端和服务器单项通讯中,分别创建独立的Socket,并通过Socket的属性。 那么如何将两个Socket进行连接,从而达到客户端和服务器之间建立输入输出流进行通信...

全栈Java
06/26
0
0
【Java资源免费分享,网盘自己拿】

JavaSE: Java马士兵:链接:https://pan.baidu.com/s/1jJRvxGi密码:v3xb Java毕向东:链接:https://pan.baidu.com/s/1ggzHkPl密码:qez1 Java刘意:链接:https://pan.baidu.com/s/1kVZQ......

阿斯顿方法
03/02
0
0
Ubuntu12.04下安装JDK7

今天想在下载个Android系统的源代码瞧瞧究竟,听说在linux系统里边下载源代码比较顺手,就准备在我新安装的Linux虚拟机里配置个环境,结果被一个JDK给卡了半天的壳。终于在刚才看到了下面的信...

坊间小毅
2012/10/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Confluence 6 配置时间和日期格式

你可以修改你 Confluence 为用户显示的时期和时间格式。设置的句法使用的是 SimpleDateFormat class,请参考 Java SimpleDateFormat 文档中的内容来设置日期和时间格式。 有下面 3 个时间和日...

honeymose
9分钟前
0
0
php seralize unserialize

关于PHP 序列化(serialize)和反序列化(unserialize)出现错误(Error at offset)的解决办法。 首先我们分析一下为什么会出现这个错误: 编码问题 UTF-8: ANSI: 我发现在我的机器上边编码改...

yeahlife
15分钟前
0
0
七、JSP九大内置对象和四个作用域

九大内置对象: request:类型是HttpServletRequest,和Servlet里的HttpServletRequest一模一样。 response:类型是HttpServletResponse,和Servlet里的HttpServletResponse一模一样。JSP里基...

Wakeeee_
18分钟前
0
0
第十四章NFS服务搭建与配置

14.1 NFS介绍 NFS介绍 NFS是Network File System的缩写;这个文件系统是基于网路层面,通过网络层面实现数据同步 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netap...

Linux学习笔记
50分钟前
0
0
双向认证-nginx

1、设置容器 docker run -it --name nginx-test2 -v /home/nginx:/apps -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro -p 8183:80 -p 7443:443 -d nginx:stable 2、修改nginx配......

hotsmile
51分钟前
0
0
深入了解 Java 自动内存管理机制及性能优化

一图带你看完本文 一、运行时数据区域 首先来看看Java虚拟机所管理的内存包括哪些区域,就像我们要了解一个房子,我们得先知道这个房子大体构造。根据《Java虚拟机规范(Java SE 7 版)》的规...

Java大蜗牛
53分钟前
4
0
SpringBoot | 第六章:常用注解介绍及简单使用

前言 之前几个章节,大部分都是算介绍springboot的一些外围配置,比如日志 配置等。这章节开始,开始总结一些关于springboot的综合开发的知识点。由于SpringBoot本身是基于Spring和SpringMvc...

oKong
54分钟前
9
0
云数据库架构演进与实践

如今,大型企业如金融企业和银行等,在下一代的微服务架构转型要求下,需要基础软件和数据平台能够实现原生的云化,以满足微服务架构的需求。 微服务,也就是一种面向服务的,有特定边界的松...

巨杉数据库
55分钟前
0
0
Linux系统梳理---系统搭建(一):jdk卸载与安装

1.去官网下载符合Linux版本的jdk,暂用jdk-8u171-linux-x64.rpm 2.登陆Linux,进入usr目录,创建java目录(方便管理,可以其他位置):mkdir java 3.上传下载的jdk包至Linux服务器,使用rz指令(sz f...

勤奋的蚂蚁
今天
0
0
Linux Kernel 4.16 系列停止维护,用户应升级至 4.17

知名 Linux 内核维护人员兼开发人员 Greg Kroah-Hartman 近日在发布 4.16.18 版本的同时,宣布这是 4.16 系列的最后一个维护版本,强烈建议用户立即升级至 4.17 系列。 Linux 4.16 于 2018 年...

六库科技
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部