java虚拟机学习

java虚拟机学习

Java虚拟机学习记录(八) —— 虚拟机性能监控与故障处理工具

一、前言 我觉得Java的强大之处在于它有非常完善的生态环境,从开发工具到分析处理工具。使用JDK中提供的工具可以在遇到程序故障时快速定位故障发生的原因并进行调优。 二、JDK命令行工具 a、jps(JVM Process Status):虚拟机进程状况工具 jps可以用来列出正…

java虚拟机学习

Java虚拟机学习记录(七)——内存分配与回收策略

一、前言 Java的内存分配,从全局来看,就是堆上分配(但也可能经过JIT编译后被拆散为标量类型并间接的栈上分配,对象的分配主要在新生代的Eden区上,如果开启了本地线程分配缓冲,将按线程优先在TLAB上分配。少数情况下也可能会直接分配在老年代中(大的对象直接进入老年代)。 二、…

java虚拟机学习

Java虚拟机学习记录(六)——HotSpot算法实现

一、前言 在JVM运行的过程中,垃圾回收是性能提升的重中之重,垃圾回收的前提是准确判定哪些对象是可以回收的,在前面的学习中说到,Java的大多数虚拟机都是通过可达性分析算法来判定对象能否回收。那么如何去找这些根节点(GC ROOTS)的位置也是一个要解决的问题。 二、HotSpo…

java虚拟机学习

Java虚拟机学习记录(五)-垃圾收集器

一、前言 众所周知,Java与C的一个显著的区别在于c需要手动的去管理内存,而Java几乎不需要去做这样的处理。原因在于Java的虚拟机有一套自己的内存回收策略。 在Java虚拟机运行过程中,虚拟机栈、程序计数器、本地方法栈随着线程的生命周期的变化而变化,因此这一部分的内存是不需…

java虚拟机学习

Java虚拟机学习记录(四)-对象的内存布局和访问定位

一、前言 jvm创建对象的过程分为类加载检查,分配对象空间,初始化类空间,设置对象信息,对象初始化。那么在分配对象空间时是如何分配的,怎么保证能够定位到对象的内存位置。 二、对象的内存布局 对象在内存中的布局可以分为三部分:对象头(Object Header),实例数据(Inst…

java虚拟机学习

Java虚拟机学习记录(三)-对象创建的过程

在Java程序运行时几乎每时每刻都有对象在被创建出来,从语言层面上看,只是new了一个对象,但是在虚拟机中这个对象的创建过程时比较复杂的(这里的对象仅适用于普通的Java对象,不包括数据和Class对象)。我把这其中的步骤总结为下面几步 1.类加载检查 当虚拟机接受到new指令时…

java虚拟机学习

Java虚拟机学习记录(二)-运行时数据区域

一、前言 Java虚拟机在执行Java程序的过程中,会把他管理的内存划分为多个不同的数据区域,这些区域各自有各自的用途,以及创建和销毁的时间,有的区域随虚拟机进程的启动而存在,有的区域依赖用户线程的启动和结束而建立和销毁。 Java虚拟机所管理的内存将会包括以下几个运行时数据区域…