JVM Run-Time Data Areas & 参数相关

在这里插入图片描述

jvm定义了各个运行时数据区:

Run-Time Data Areas
     1)The pc Register
     2)Java Virtual Machine Stacks
     3)Heap
     4)Method Area
     5)Run-Time Constant Pool
     6)Native Method Stacks

运行时数据区: <=== 是一个规范,内存结构是一个实现
1)部分运行时数据区域是在 jvm 创建时创建 销毁时销毁
2)部分运行时数据区域是每个Thread都有一个的,Thread创建时创建,Thread退出时销毁
====> 有一些是共享的 ,有一些是独享的

1)The pc Register 程序计数器 <=== 每个Thread独有

说明:
会占用一小块的内存,其实每个运行时数据区都会占用各自小块内存
用于当前线程所执行的字节码的 行号指示器
用于记录每个线程目前执行到 哪里了:你的代码所对应的哪一条 字节码指令

多个线程并发执行时候,多个线程cpu资源抢占,每一个线程都有自己的程序计数器,进而得到cpu资源时候才知道执行到哪的了

不同的字节码指令做不同的事情,字节码指令是.java文件编译而来的

字节码文件查看方式:javap -verbose HelloWorld.class >> HelloWorld.txt

没有构造器,自带一个默认的空的构造器


2)Java Virtual Machine Stacks <=== 每个Thread独有

     存: 用于存放方法里面的一些局部变量
     存: frames: 栈帧
          A new frame is created each time a method is invoked
          A frame is destroyed when its method invocation completes

          入栈:方法被调用
          出栈:方法执行完
可能会出现的异常:
If the computation in a thread requires a larger Java Virtual Machine stack than is permitted, the Java Virtual Machine throws a StackOverflowError. 

即出现情况:线程中的计算需要的 大于 Java Virtual Machine Stacks所允许的
    分析:Java Virtual Machine Stacks 存放的东西是与我们的方法相关联的
         调用方法时,会为每个方法创建Frame,入栈
         方法执行执行完毕,Frame出栈

         递归没出口的时候,就会不停的入栈入栈,就会一直压压压,但是Java Virtual Machine Stacks这个的大小是一定的,就会

StackOverflowError

3)Heap 堆 <== 所有 jvm Thread 共享的

    创建对象实例 new Student() 
    存: 对象实例和数组
    OutOfMemoryError
If a computation requires more heap than can be made available by the automatic storage management system, the Java Virtual Machine throws an OutOfMemoryError.

即出现情况:计算需要的堆 大于 自动存储管理系统可用的堆

4)Method Area 方法区域 <== Thread 共享的
注意:1.8 Metaspace 元数据 : 存放与.class 相关的一些信息

constant pool, 
field and method data, 
and the code for methods 
and constructors, 

即: .class字节码文件会被加载进来

If memory in the method area cannot be made available to satisfy an allocation request, the Java Virtual Machine throws an OutOfMemoryError.

即:如果无法使方法区域中的内存满足分配请求,则Java虚拟机将抛出OutOfMemoryError。

5)Run-Time Constant Pool <== Thread 共享的

6)Native Method Stacks 本地方法栈 <=== 每个Thread独有
Object 类里面许多方法就是navite修饰的,
当调用Navite修饰的方法的时候,每个线程就会有一个本地方法栈
调用底层的,C等

方法: 
    navite 的
    非navite的

前面都是JVM的6大区域,接下来这一个不属于JVM的:
DirectByteBuffer <== java.nio 包
堆外内存 Spark 直接操作内存空间
Spark SQL?
钨丝java

直接操作内存空间,性能好,如果去调用底层源码是可以的

启动起来,就是一个JVM进程

----------------------------------------------------华丽分割线---------------------------------------------------


在这里插入图片描述

JDK7: 永久代
JDK8: Metaspace 元空间
JVM参数类型:
1)标准: 稳定
2)X: 相对变化少的
3)XX : jvm调优的重点
a)boolean : -XX[+/-] name <==启动 禁用

        -XX:+UserG1GC
    b)非boolean :  -XX:name = value

java -Xint -version
java -Xcomp -version

3)XX : jvm调优的重点
启动一个java进程
jps 查看进程IP

【jinfo 】
用于查看正在运行的JVM参数:
语法:jinfo -flag name pid
jinfo -flag PrintGCDetails pid
结果:可以看到是否开启打印GC的参数
jinfo -flag UseG1GC pid
结果:默认是没有开启的,说明JDK8默认不是使用G1作为垃圾回收器的

调整 VM options : -XX:+PrintGCDetails

【元空间大小】
jinfo -flag MetaspaceSize pid
-XX:MetaspaceSize=21807104 大约20M

调整 VM options : -XX:MetaspaceSize=128m

【新生代 老年代】 <== 默认每次GC 年龄会+1
jinfo -flag MaxTenuringThreadshold pid
默认:15

【jinfo 更多】
jinfo -flag InitialHeapSize pid
结果:初始堆大小
jinfo -flag MaxHeapSize pid
结果:最大堆大小

jinfo -flags pid
结果:打出一堆VM参数

【PrintFlags系列】
-XX:+PrintFlagsInital
-XX:+PrintFlagsFinal

jinfo -XX:+PrintFlagsInital -version > temp.txt
结果:
= 表示默认值
:= 表示修改过的

【几个特殊的XX参数】
-Xmx : JVM堆的最大值 -XX:MaxHeapSize 初始化是机器内存的1/4
-Xms : JVM堆的最小值 -XX:InitialHeapSize 初始化是机器内存的1/64

    最佳实践:调整为一样的大小,防止内存抖动
    调整 VM options : -Xms10m -Xmx10m
        jinfo -flag InitialHeapSize pid
        结果:初始堆大小
        jinfo -flag MaxHeapSize pid
        结果:最大堆大小

-Xss -XX:ThreadStackSize

jinfo -flag ThreadStackSize pid


User user = new User();
引用(栈) 对象(堆)

User.class(metaspace)


一流的企业做规范
二流企业做产品
三流企业做产品
四流企业做服务
五流企业做项目


5个异常
5个JVM参数

----------------------------------------------------华丽分割线---------------------------------------------------

选用合适的垃圾回收器很重要

开启ccs就是短指针
每new 一个对象,都会有一个指向自己class的指针,class是在metaspace里面
默认是64位的长指针,考虑性能,可以修改为32位的短指针

在这里插入图片描述

【jstat -gc pid 】
打出常用用法: jstat -options

demo:
调整 VM options: -Xms128m -Xmx128m -XX:MetaspaceSize=128m -XX:+UseCompressedClassPoint
jstat -gc pid
结果:关注 CCSC CCSU 是有值的 再就是关注MC MU :metaspace 总共大小,用掉的大小

调整 VM options: -Xms128m -Xmx128m -XX:MetaspaceSize=128m -XX:-UseCompressedClassPoint
jstat -gc pid
结果:关注 CCSC CCSU 均为0,关闭ccs,就不存在ccs的概念了,64位的就是存在metaspace 里面, 这时候再就是关注MC MU,MC = MC(上面) + CCSC(上面)

调整 VM options: -Xms128m -Xmx128m -XX:MetaspaceSize=128m -Xint -XX:-UseCompressedClassPoint
即:默认是comp 编译执行代码,这里修改为解析执行
jstat -gc pid
结果:关注,MC ,会发现比默认的编译执行 总的元空间小

----------------------------------------------------华丽分割线---------------------------------------------------

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

推荐阅读更多精彩内容

  • 1. JVM参数分类 标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容; 非标准参数(-X)...
    Coding小聪阅读 2,295评论 0 0
  • 前言 昨天谢照东大神在群里提出一个问题:怎么查看Metaspace里具体包含的是什么,起因是他的某个服务设置了-X...
    阿飞的博客阅读 101,265评论 14 75
  • 作者:一字马胡 转载标志 【2017-11-12】 更新日志 日期更新内容备注 2017-11-12新建文章初版 ...
    beneke阅读 2,220评论 0 7
  • 最近朋友圈被《啥是佩奇》这个微电影刷屏了,看了之后心头既开心有莫名的酸楚。但是她为什么那么火呢? 视频主要讲述了生...
    俊涛声依旧阅读 292评论 1 0
  • 2019年4月2O日 星期六 晴 今天虽然是周六,但是儿子依然像往常一样早早起床,先做完一份试卷,然后吃早饭。考试...
    五三班李玉涵妈妈阅读 54评论 0 1