JVM系列之七:HotSpot 虚拟机】的更多相关文章

1. 对象的创建 1. 遇到 new 指令时,首先检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载.解析和初始化过.如果没有,执行相应的类加载. 2. 类加载检查通过之后,为新对象分配内存(内存大小在类加载完成后便可确认).在堆的空闲内存中划分一块区域(‘指针碰撞-内存规整’或‘空闲列表-内存交错’的分配方式). A.假设Java堆是规整的,所有用过的内存放在一边,空闲的内存放在另外一边,中间放着一个指针作为分界点的指示器.那分配内存只是把指针…
本节以常用的虚拟机HotSpot和常用的内存区域Java堆为例,深入探讨HotSpot虚拟机在Java堆中对象分配.布局和访问的全过程. 1. 对象的创建 Java是一门面向对象的编程语言.在语言层面上,创建对象(例如克隆.反序列化)通常仅仅是一个new关键字而已,而在虚拟机中,对象(文中讨论的对象限于普通Java对象,不包括数组和Class对象等)的创建又是怎样一个过程呢? 对象创建过程如下: 1.1 类加载检查 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个…
jps JVM Process Status Tool,显示指定系统内所有的 HotSpot 虚拟机进程.显示信息包括虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID(Local Virtual Machine Identifier,LVMID). jps [-q] [-mlvV] [<hostid>] 选项 作用 -q 只输出 LVMID,省略主类的名称 -m 输出虚拟机进程启动时传递给主类 main() 函数的参数 -l 输出主类的名称,如果进程执行的是 jar 包,输出 jar 路径…
虚拟机栈 1.虚拟机栈维护一个线程中所有方法的栈帧,每个栈帧中保存着这个方法中用到的局部变量表,操作数栈,常量引用 2.可以用-Xss来设置每个线程中虚拟机栈的大小,在jdk1.4之前默认虚拟机栈大小是256K,在jdk1.5+默认虚拟机栈大小是1M java -Xss2M HackTheJava 3.该区域可能抛出的异常 当线程请求的栈深度超过最大限制后,或抛出StackOverflowError 当栈进行动态扩展无法申请到内存后,会抛出OutOfMemoryError 本地方法栈 本地方法栈…
BTrace 是什么? BTrace 是一个动态安全的 Java 追踪工具,它通过向运行中的 Java 程序植入字节码文件,来对运行中的 Java 程序热更新,方便的获取程序运行时的数据信息,并且,保证自己的消耗特别小,大部分情况下不会影响 Java 程序的性能. BTrace 能干什么? 相信每一位开发都或多或少的干过这档子事:为了解决线上的一个 bug,不得不在代码中打印下入参.出参数据,然后再重启服务器,观察日志.BTrace 的出现就是为了解决这类事宜,BTrace 的最大好处,是可以通…
持续更新系列. 参考自<深入理解Java虚拟机>.<Java性能权威指南>.<分布式Java应用基础与实践>. Java的内存结构 JVM系列——运行时数据区 JVM系列——代空间的划分 JVM系列——判断对象的死活 JVM系列——Java内存模型 JVM系列——内存溢出与内存泄露 JVM系列——深入分析对象的内存布局 垃圾收集 JVM系列——垃圾收集算法 JVM系列——垃圾收集器 类的加载机制 JVM系列——三个ClassLoader详解 JVM系列——类加载机制 J…
JVM系列笔记目录 虚拟机的基础概念 class文件结构 class文件加载过程 jvm内存模型 JVM常用指令 GC与调优 指令集分类 基于寄存器的指令集 基于栈的指令集 Hotspot中的Local Variable Table相当于JVM的寄存器 运行时数据区 运行时数据区分6个部分: PC.JVM Stack.Heap.MethodArea.Native Method Stack.Direct Memory. PC: 程序计数器,存放下一条指令的位置. JVM Stack:线程独有的栈,…
JVM系列笔记目录 虚拟机的基础概念 class文件结构 class文件加载过程 jvm内存模型 JVM常用指令 GC与调优 了解HotSpot常用命令行参数 JVM的命令行参数参考: https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html -标准 所有版本支持 -X 非标准 特定版本支持 -XX 不稳定 下个版本可能会取消 常见和本文中可能用到的参数记录一下,具体垃圾回收器的参数后续调优的详细说明. 参数 说明…
JVM系列笔记目录 虚拟机的基础概念 class文件结构 class文件加载过程 jvm内存模型 JVM常用指令 GC与调优 Class文件加载过程 JVM加载Class文件主要分3个过程:Loading .Linking.Initialzing 1.Loading Loading的过程就是通过类加载器将.class文件加载到jvm内存中过程.需要理解双亲委派机制.类加载器ClassLoader,加载过程如下. ClassLoader 不同的类加载器加载范围不一样,以Java8中的为例. Boo…
JVM系列笔记目录 虚拟机的基础概念 class文件结构 class文件加载过程 jvm内存模型 JVM常用指令 GC与调优 硬件层数据一致性 - 存储器层次结构 从L6-L0 空间由大变小,速度由慢到快. -缓存一致性算法 CPU实现缓存一致性的协议很多,其中intel 使用的MESI(Modified Exclusive Shared Or Invalid)协议.具体可以参考:[MESI--CPU缓存一致性协议](https://www.cnblogs.com/z00377750/p/918…