
jvm
方方园园
这个作者很懒,什么都没留下…
展开
-
jvm结构
名称特征作用配置参数异常程序计数器占用内存小,线程私有,声明周期与线程相同大致为字节码行号指示器无无虚拟机栈线程私有,生命周期与线程相同,使用连续的内存空间Java 方法执行的内存模型,存储局部变量表、操作栈、动态链接、方法出口等信息-XssStackOverflowError、OutOfMemoryError堆线程共享,生命周期与虚拟机相同,可以不使用连续的内存地址保存对象实例,所有对象实例(包括数组)都要在堆上分配-Xms -Xsx -Xmn...原创 2020-07-26 19:19:50 · 161 阅读 · 0 评论 -
执行引擎执行代码底层实现
执行引擎执行代码底层实现解释器字节码解释器java字节码->c++ ->硬编码(汇编)其实是switch case 将java转成c++语言模板解释器java字节码 ->硬编码(汇编)JIT即时编译模板解释器直接编译成硬编码,存储在方法区jvm三种执行方式(执行引擎执行java字节码的运行方式)1、Xint 纯字节码解释器2、Xcomp 纯即时编译斜体样式3、Xminxed 混合式(默认)为什么使用混合模式?项目越大编译时间耗时过长热机切冷机故障(阿里)c原创 2020-07-19 21:34:19 · 210 阅读 · 0 评论 -
jvm内存模型
内存模型介绍Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽各个硬件平台和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。那么Java内存模型规定了哪些东西呢,它定义了程序中变量的访问规则,往大一点说是定义了程序执行的次序。注意,为了获得较好的执行性能,Java内存模型并没有限制执行引擎使用处理器的寄存器或者高速缓存来提升指令执行速度,也没有限制编译器对指令进行重排序。也就是说,在java内存模型中,也会存在缓存一致性原创 2020-07-02 21:35:37 · 187 阅读 · 0 评论 -
volatile的并发编程
1、什么是虚拟机栈随线程创建而创建,随线程结束而销毁2、虚拟机中有多少个栈帧调用一个方法一个栈帧3、cas锁(轻量级锁线程独占)自旋锁与cas锁的关系while循环/goto+cas=自旋jvm内存模型,事实上是操作系统的一个内存池4、volatile 读取主内存(堆内存区+方法区) 取volatile 变量工作内存(虚拟机栈)放到工作内存工作内存变化——》会写到主内存5、volatile 如何保证有序性?禁止指令重排6、DCL为什么要加双重验证7、为什么new不是原子性操作原创 2020-06-20 21:45:21 · 209 阅读 · 0 评论 -
jvm调优(8)GC日志分析
这里写目录标题1、如何打印2、启动成功 telnet通 但是jconsole连接不上2.1、解决方法1、如何打印我以我们的一个项目为例java -Xms128m -Xmx128m -verbose:gc -Xloggc:/home/administrator/james/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintHeapAtGC -XX:HeapDumpPath=/home/administrator/james/error.hprof -X原创 2020-06-14 04:08:59 · 389 阅读 · 0 评论 -
jvm调优(七)参数分析
1、Xmsstaring 堆起始大小2、Xmxmax 堆最大3、Xmnnew 新生代大小-XX:SurvivorRatio=84、jmap -heap 4591查看 jvm相关参数原创 2020-06-12 01:28:11 · 220 阅读 · 0 评论 -
JVM调优(二)参数配置解释 以及tomcat调优
目录1、上个例子1、上个例子这节用某项目做示例 java -Xms500m -Xmx500m -Xmn250m -Xss256k -server -XX:+HeapDumpOnOutOfMemoryError -jar bdf_apiroute_boot.jar原创 2020-06-08 21:16:16 · 275 阅读 · 0 评论 -
jvm调优(五)cpu异常定位
目录1、使用命令查看2、找到占cpu高的pid3、然后shift+h找到进程号4、jstack 输出的日志中nid(十六进制)=pid(十进制)ps:将39(十进制)转换为十六进制1、使用命令查看top命令2、找到占cpu高的pid使用jstack pid >aaa.txt3、然后shift+h找到进程号找到进程号后查看他的pid是多少4、jstack 输出的日志中nid(十六进制)=pid(十进制)查看对应pid的代码具体在哪一行ps:将39(十进制)转换为十六进制pri原创 2020-06-08 00:01:05 · 442 阅读 · 0 评论 -
jvm调优(四)吞吐量、tps、qps概念、jvm等概念
1、吞吐量2、平均响应时间3、tps4、qps原创 2020-06-07 23:13:22 · 1864 阅读 · 0 评论 -
jvm调优(三)linux命令及其解释
目录1、free -m/-g(剩余内存按m/g显示)2、iostat (读写速度)1、free -m/-g(剩余内存按m/g显示)列名含义total总内存used已用的内存free空闲内存写buff读cache2、iostat (读写速度)查看具体含义https://man7.org/linux/man-pages/man1/iostat.1.htmliostat 1 实时刷新iostat -dx 1 详情信息 -d 显示设备利用率原创 2020-06-07 21:50:46 · 191 阅读 · 0 评论 -
JVM调优(一)预估调优
目录1、引子2、正题3、JVM调优开始4、场景5、前置知识6、如何做调优1、引子魏文王问扁鹊:你们三兄弟都精通医术,谁是医术最好的呢?扁鹊回答:大哥最好,二哥次之,我最差。魏文王不解的问:为什么这样说呢?扁鹊答:大哥治病是在病人发作之前,那时候病人自己不觉得有病,但大哥就下药铲除了病根,使他的医术难以被人认可,所以没有名气;二哥治病是在病起之初,症状尚不十分明显,病人也没有觉得痛苦,二哥就能药到病除,所以大家的印象就是小病找二哥;我治病是在病人危急时刻,病人痛苦万分,家人心急如焚,他们看到我治病时在经脉转载 2020-06-01 22:26:18 · 437 阅读 · 0 评论 -
多线程之Guarded Suspension模式
Guarded Suspension 字面意思是被监视挂起的意思,Guarded Suspension模式是让线程等待来保证实例安全性主方法package com.example.demo;public class Main { public static void main(String[] args) { RequestQueue requestQueue = new RequestQueue(); new ClientThread(requestQueu原创 2020-05-12 00:27:25 · 191 阅读 · 0 评论 -
jvm调优
不开指针压缩 8字节8字节=64位64=48+16(保留位)最大内存 2的48次方 256t开指针压缩 4字节对象组成结构mark word类型指针数组长度实例数据:定义的属性对齐填充:8字节对齐开启指针压缩markword不会压缩开启指针压缩16B=8B +4B (Kclass Ponter)+0+4B未开启指针压缩16B=8B +8B (Kclass P...原创 2020-04-22 21:34:34 · 223 阅读 · 0 评论