旷野徒奔-Java底层篇(1.4)
Java底层篇(1.4)
- 1、JVM
- → Java 对象模型
- oop-klass、对象头
- → HotSpot
- 即时编译器、编译优化
- → 虚拟机性能监控与故障处理工具
- jps, jstack, jmap, jstat, jconsole, jinfo, jhat, javap, btrace, TProfiler
- Arthas
1、JVM
→ Java 对象模型
oop-klass、对象头
在JVM中,使用了OOP-KLASS模型来表示java对象,即:
1.jvm在加载class时,会创建instanceKlass,表示其元数据,包括常量池、字段、方法等,存放在方法区;instanceKlass是jvm中的数据结构;
2.在new一个对象时,jvm创建instanceOopDesc,来表示这个对象,存放在堆区,其引用,存放在栈区;它用来表示对象的实例信息,看起来像个指针实际上是藏在指针里的对象;instanceOopDesc对应java中的对象实例;
3.HotSpot并不把instanceKlass暴露给Java,而会另外创建对应的instanceOopDesc来表示java.lang.Class对象,并将后者称为前者的“Java镜像”,klass持有指向oop引用(_java_mirror便是该instanceKlass对Class对象的引用);
4.要注意,new操作返回的instanceOopDesc类型指针指向instanceKlass,而instanceKlass指向了对应的类型的Class实例的instanceOopDesc;有点绕,简单说,就是Person实例—>Person的instanceKlass—>Person的Class。
instanceOopDesc,只包含数据信息,它包含三部分:
- 对象头,也叫Mark Word,主要存储对象运行时记录信息,如hashcode, GC分代年龄,锁状态标志,线程ID,时间戳等;
- 元数据指针,即指向方法区的instanceKlass实例 (虚拟机通过这个指针来群定这个对象是哪个类的实例。)
- 实例数据;
- 另外,如果是数组对象,还多了一个数组长度
【参考链接】https://www.cnblogs.com/thiaoqueen/p/9314745.html
→ HotSpot
即时编译器、编译优化
部分商用虚拟机中,Java最初通过解析器( Interpreter )解析,当虚拟机发现某个方法或代码块运行的特别频繁时,就把这些代码当成“热点代码”,为了提高热点代码的执行效率,在运行时,即时编译器(Just In Time Compiler)会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化。
解释器和编译器各有各的优点:
解释器优点:当程序需要迅速启动的时候,解释器可以首先发挥作用,省去了编译的时间,立即执行。解释执行占用更小的内存空间。同时,当编译器进行的激进优化失败的时候,还可以进行逆优化来恢复到解释执行的状态。
编译器优点:在程序运行时,随着时间的推移,编译器逐渐发挥作用,把越来越多的代码编译成本地代码之后,可以获得更高的执行效率。
因此,整个虚拟机执行架构中,解释器与编译器经常配合工作,如下图所示。
【参考链接】https://www.cnblogs.com/linghu-java/p/8589843.html
→ 虚拟机性能监控与故障处理工具
jps, jstack, jmap, jstat, jconsole, jinfo, jhat, javap, btrace, TProfiler
名称 | 主要作用 |
---|---|
jps | jvm process status tool,显示指定系统内所有的hotspot虚拟机进程 |
jstack | stack trace for java ,显示虚拟机的线程快照 |
jmap | memory map for java,生成虚拟机的内存转储快照(heapdump文件) |
jstat | jvm statistics monitoring tool,用于收集hotspot虚拟机各方面的运行数据 |
jinfo | configuration info for java,显示虚拟机配置信息 |
jhat | jvm heap dump browser,用于分析heapmap文件,它会建立一个http/html服务器让用户可以在浏览器上查看分析结果 |
【参考链接】https://blog.csdn.net/baidu_39299382/article/details/80330476
Arthas
Arthas(阿尔萨斯)是阿里巴巴开源的 Java 诊断工具,深受开发者喜爱。
当你遇到以下类似问题而束手无策时,Arthas 可以帮助你解决:
这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
是否有一个全局视角来查看系统的运行状况?
有什么办法可以监控到JVM的实时运行状态?
Arthas 采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。
旷野徒奔-Java底层篇(1.4)相关推荐
- 旷野徒奔-Java底层篇(1.3)
Java底层篇(1.3) 1.JVM → Java 内存模型 计算机内存模型.缓存一致性.MESI 协议 可见性.原子性.有序性.happens-before. → JVM 参数及调优 -Xmx.-X ...
- Java总结篇系列:Java多线程(三)
2019独角兽企业重金招聘Python工程师标准>>> 本文主要接着前面多线程的两篇文章总结Java多线程中的线程安全问题. 一.一个典型的Java线程安全例子 public cla ...
- java提高篇之数组(2)
前面一节主要介绍了数组的基本概念,对什么是数组稍微深入了一点点,在这篇博文中主要介绍数组的其他方面. 三.性能?请优先考虑数组 在java中有很多方式来存储一系列数据,而且在操作上面比数组方便的多?但 ...
- Java集合篇:Map总结
相关阅读: Java基础篇:hashCode的作用 Java集合篇:HashMap原理详解(JDK1.7及之前的版本) Java集合篇:HashMap原理详解(JDK1.8) Java集合篇:Hash ...
- Java基础篇:封装、继承、多态三大特性
目录: 一.Java三大特性之:封装 二.Java三大特性之:继承 三.Java三大特性之:多态 一.Java三大特性之:封装 1.什么是封装: 封装,就是将数据和基于数据的操作封装在一起,数据被保护 ...
- 【转】java提高篇(二)-----理解java的三大特性之继承
[转]java提高篇(二)-----理解java的三大特性之继承 原文地址:http://www.cnblogs.com/chenssy/p/3354884.html 在<Think in ja ...
- Java提高篇 —— Java三大特性之继承
一.前言 在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事 ...
- JAVA分布式篇3——Dubbo
JAVA分布式篇3--Dubbo 1.架构演变 1.1.单应用架构 当网站流量很小时,只需要一个应用,将所有的功能部署到一起(所有业务都放在一个tomcat 里),从而减少部署节点和成本 用于简化 增 ...
- Java SSM篇2——框架的基本认识
Java SSM篇2--框架的基本认识 1.什么是框架 框架就是一套规范,既然是规范,你使用这个框架就要遵守这个框架所规定的约束 框架可以理解为半成品软件,框架做好以后,接下来在它基础上进行开发 2. ...
最新文章
- .net mysql中文乱码解决办法
- 机器人领域牛人和研究组列表
- python怎么在电脑上使用-使用python在本地电脑上快速处理数据
- 笔记-中项案例题-2018年上-整体管理
- CodeForces:749(div1)750(div2)
- IndexOptions类说明
- Hibernate初探之单表映射——jar包的导入
- Java 发送 Http请求工具类
- 华军java_Java SE Runtime Environment 8
- 汽车的DFMEA(Design Failure Mode and Effect Analysis)
- matlab中怎么使用数组,matlab中数组的基本使用
- python自定义拼音输入法_用Python从0开始实现一个中文拼音输入法的思路详解
- mysql 数字正则_mysql 正则
- 使用unity制作游戏——打砖块
- 如何演示扇形面积公式推导过程
- 俞敏洪+马云+牛根生+史玉柱经典语录
- One Billion Customers
- 我在阿里做数据分析师,一位阿里数据分析师的日常
- CH340进行STM32单片机程序烧录
- 累涨超200%成华尔街新宠 Fastly借边缘云有望冲上“云”霄?