Java虚拟机

一.基础:

 1)什么是java虚拟机、工作模式(2、区别)

 2)基本结构(9)

 a)方法区(永久区、元数据区):存放内容、参数(1)

  -XX:MaxMetaspaceSize 1.8以后元数据区,默认不指定大小,最大可使用系统内存,超出溢出为OOM

 b)java堆:特点、结构、参数(3+2+3)

  -Xmx:堆空间最大值,空间不足抛出OOM,Out Of Memory

  -Xms:堆初始值

  -Xmn:堆中新生代大小,新生代的大小一般设置为堆空间的1/3到1/4

  -XX:NewRatio 设置老年代和新时代的比例,老年代/新时代

  -XX:SuvivorRatio 设置新eden空间和from/to空间的比例

  -XX:HeapDumpOnOutOfMemoryError 内存溢出时,导出内存溢出整个堆信息

  -XX:HeapDumpPath 指定导出文件位置,需要使用MAT工具打开

  -XX:OnOutMemoryError=脚本路径 虚拟机运行发生OOM时执行一个脚本

 c)直接内存:特点、参数(1)

  -XX:MaxDirectMemorySize 最大直接内存,不设置,默认最大堆内存

 d)java栈:特点,组成(栈帧、局部变量表、操作数、帧数据(组成)、槽位)、栈上分配(优缺点)、参数(1+2)

  -Xss:线程最大Java栈空间 StackOverflowError

  -XX:DoEscapeAnalysis 开启逃逸分析,只有在-Server模式下可用

  -XX:+EliminateAllocations 开启标量替换,允许对象打散分配到栈上,默认开启

 3)其他参数:

  1.日志跟踪分析(回收堆8)

  -XX:+PrintGC 打印垃圾回收日志,显示堆空间变化

  -XX:+PringGCDetail 打印详细垃圾回收日志,显示堆空间变化

  -XX:+PrintGCTimeStamps 增加输出距离启动发生回收的时间偏移量

  -XX:+PrintHeapAtGC 打印全面的堆信息

  -XX:+PrintGCApplicationConcurrentTime 打印应用程序执行时间

  -XX:+PrintGCApplicationStoppedTime 打印回收造成的应用停顿时间

  -XX:+PrintReferenceGC 打印跟踪系统内软、弱、虚引用和Finallize队列信息

  -Xloggc:路径 指定打印日志文件路径

  2.虚拟机日志跟踪分析(3)

  -XX:+PrintVMOption 打印虚拟机接受到的命令参数

  -XX:+PrintCommondLineFlags 打印传递给虚拟机的显式和隐式参数

  -XX:+PrintFlagsFinal 打印所有的系统参数

  3.类日志跟踪分析(4)

  -verbose:class 跟踪类的加载和卸载

  -XX:TraceClassLoading 跟踪类的加载

  -XX:TraceClassUnloading 跟踪类卸载

  -XX:+PrintClassHistogram 打印系统类的分布情况

二.垃圾回收

1)垃圾回收:概念、STW

2)垃圾回收算法:

 a)引用计数法(Reference Counting):计数器引用加1,引用失效减1。

 问题:无法处理循环引用;加减操作影响性能

 b)标记清除法(Mark-Sweep):通过根节点标记所有可达对象,然后清除所有不可达对象;串行垃圾回收器,eden存活对象复制到未被使用的survivor空间

 问题:空间碎片,不连续的内存空间影响性能

 c)复制算法(Copying):内存分两块,回收时将存活对象复制到未使用内存空间

 问题:内存折半

 d)标记压缩法(Mark-Compact,标记清除压缩算法Mark-Sweep-Compact):在标记清除算法上增加存活对象压缩到内存一段,之后清除边界外空间;适合老年代

 e)分代算法(Generational Collecting):将内存区间根据对象特点分成几块,每块使用不同回收算法,新生代用复制算法,老年代用标记清除法或标记压缩法

 卡表:卡表中每个比特位用来表示老年代的某一区域中所有对象是否持有新生代对象的引用,新生代GC时扫描卡表减少时间

 f)分区算法(Region):将堆空间划分成连续的不同小区间,每个小区间独立使用独立回收,一次回收可控制区间数量

3)引用和可触及强度:4种、特征

三.垃圾回收器:

1)串行SerialGC回收器:虚拟机工作在Client模式下的默认垃圾回收器,独占式

 新生代串行回收器:复制算法

 老年代串行回收期:标记压缩算法

2)新生代ParNewGC回收器:工作在新生代的垃圾回收器,使用复制算法,独占式

 -XX:ParallelGCThread指定线程数,一般和CPU数量相当,小于8核设置为CPU数,大于8核3+((5*CPU_count)/8)

3)新生代ParallelGC回收器:工作在新生代的垃圾回收器,使用复制算法,关注系统吞吐量,独占式

 -XX:MaxGCPauseMillis指定最大垃圾回收停顿时间

 -XX:GCTimeRatio设置吞吐量n,默认99

 -XX:UseAdaptiveSizePolicy,打开自适应调整GC策略,自动调整堆参数,自动调优

4)老年代ParallelOldGC回收器:工作在老年代的垃圾回收器,标记压缩算法,独占式

5)CMS(Concurrent Mark Sweep)回收器:工作在老年代的垃圾回收器,使用标记清除算法,关注系统停顿时间,非独占式,回收失败时,使用串行回收

 -XX:ConcGCThreads或-XX:ParallelCMSThreads指定线程数,默认值=(ParallelGCThread+3)/4

 -XX:CMSInitiatingOccupancyFraction回收阀值,默认68

 -XX:UseCMSCompactAtFullCollection开启回收完成后做一次内存碎片整理

6)G1回收器:1.7以后新增回收器,取代CMS

-XX:+UseSerialGC 新生代、老年代都使用串行回收器

-XX:+UseParNewGC 新生代使用PerNew回收器,老年代使用串行回收器

-XX:+UseParallelGC 新生代使用Parallel回收器,老年代使用串行回收器

-XX:+UseParallelOldGC 新生代使用Parallel回收器,老年代使用ParallelOldGC回收器

-XX:+UseConcMarkSweepGC 新生代使用PerNew回收器,老年代使用CMS回收器

-XX:+UseG1GC 打开G1回收器

四.监控工具:

1)系统命令:top(整体资源情况)、vmstat(内存和cpu)、iostat(IO使用)、pidstat(全面(额外安装))

2)Java自带:jstat、jinfo(应用程序扩展参数)、jmap(生成堆文件,配合jhat堆分析工具)、jstack(导出线程堆栈)、jconsole(图形化性能监控)、jvisualvm(全能性监控工具、远程JMX)

3)第三方:JRockit中的Misson Control

五.内存溢出:

OOM(内存溢出)包括堆溢出,直接内存溢出,永久区溢出

1)堆溢出:java heap space

解决方式:调大-Xmx,通过visual VM分析占用大量堆空间的对象

2)直接内存溢出:OutOfMemoryError

解决方式:调大-XX:MaxDirectMemorySize

3)过多线程导致OOM:unable to create new native thread

解决方式:减少堆空间,增加栈空间

4)永久区溢出:OutMemoryError:PermGen space

解决方式:增加MaxPermSize,减少系统需要的类的数量

5)GC效率低下引起的OOM:GC overhead limit exceeded

六.Class装载系统

1)装载:流程(3+3)、装载条件(6)

2)装载详细:加载类(装载什么3、ClassLoader(分类(4)、全盘负责、双亲委托))、验证(验证什么、过程(4))、准备(准备什么)、解析(解析什么)、初始化(初始化什么)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容