草庐IT

jvm-debug

全部标签

JVM(一)-内存结构

我们都知道,我们写的Java程序需要先经过编译,生成了.class文件(字节码文件)。然而,计算机并不能直接解释.class文件里面的内容,这时候就需要一个能加载、解释.class文件并且能按.class文件里的内容进行处理的一个东西--JVM。JVM,就是Java虚拟机。它是一种规范,有针对不同系统的特定实现(Linux,Windows,macOS)。这样,相同的字节码就能在不同的系统上运行,实现了跨平台运行(WriteOnce,RunAnywhere)。JVM的内存结构上图是JDK1.8的JVM内存结构,可以看出内存结构分为程序计数器、Java虚拟机栈、本地方法栈、堆、元空间,其中程序计数

JVM(一)-内存结构

我们都知道,我们写的Java程序需要先经过编译,生成了.class文件(字节码文件)。然而,计算机并不能直接解释.class文件里面的内容,这时候就需要一个能加载、解释.class文件并且能按.class文件里的内容进行处理的一个东西--JVM。JVM,就是Java虚拟机。它是一种规范,有针对不同系统的特定实现(Linux,Windows,macOS)。这样,相同的字节码就能在不同的系统上运行,实现了跨平台运行(WriteOnce,RunAnywhere)。JVM的内存结构上图是JDK1.8的JVM内存结构,可以看出内存结构分为程序计数器、Java虚拟机栈、本地方法栈、堆、元空间,其中程序计数

JVM运行时数据区域详解

参考文章:《JavaSe11虚拟机规范》《深入理解Java虚拟机-JVM高级特性与最佳实践第3版》-周志明本文基于JavaSe11讲解。根据《Java虚拟机规范》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域:对于不同的虚拟机实现,在运行时数据区的实现上并不完全相同。对于常用的HotSpot虚拟机来说,它的运行时数据区如下:主要区别在于,HotSpot使用了直接使用本地内存(即机器本身内存)的元空间(metaspace)来实现方法区。下面针对每个具体的数据区域进行详细的介绍。1.程序计数器程序计数器(ProgramCounterRegister)是一块较小的内存空间,它可以看

JVM运行时数据区域详解

参考文章:《JavaSe11虚拟机规范》《深入理解Java虚拟机-JVM高级特性与最佳实践第3版》-周志明本文基于JavaSe11讲解。根据《Java虚拟机规范》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域:对于不同的虚拟机实现,在运行时数据区的实现上并不完全相同。对于常用的HotSpot虚拟机来说,它的运行时数据区如下:主要区别在于,HotSpot使用了直接使用本地内存(即机器本身内存)的元空间(metaspace)来实现方法区。下面针对每个具体的数据区域进行详细的介绍。1.程序计数器程序计数器(ProgramCounterRegister)是一块较小的内存空间,它可以看

JVM Sandbox入门教程与原理浅谈

本文为本人原创文章,首发收录于《阿里开发者》公众号。在日常业务代码开发中,我们经常接触到AOP,比如熟知的SpringAOP。我们用它来做业务切面,比如登录校验,日志记录,性能监控,全局过滤器等。但SpringAOP有一个局限性,并不是所有的类都托管在Spring容器中,例如很多中间件代码、三方包代码,Java原生代码,都不能被SpringAOP代理到。如此一来,一旦你想要做的切面逻辑并不属于Spring的管辖范围,或者你想实现脱离Spring限制的切面功能,就无法实现了。那对于Java后端应用,有没有一种更为通用的AOP方式呢?答案是有的,Java自身提供了JVMTI,Instrumenta

JVM Sandbox入门教程与原理浅谈

本文为本人原创文章,首发收录于《阿里开发者》公众号。在日常业务代码开发中,我们经常接触到AOP,比如熟知的SpringAOP。我们用它来做业务切面,比如登录校验,日志记录,性能监控,全局过滤器等。但SpringAOP有一个局限性,并不是所有的类都托管在Spring容器中,例如很多中间件代码、三方包代码,Java原生代码,都不能被SpringAOP代理到。如此一来,一旦你想要做的切面逻辑并不属于Spring的管辖范围,或者你想实现脱离Spring限制的切面功能,就无法实现了。那对于Java后端应用,有没有一种更为通用的AOP方式呢?答案是有的,Java自身提供了JVMTI,Instrumenta

为什么这11道JVM面试题这么重要(附答案)

本文内容整理自博学谷狂野架构师运行时数据区都包含什么虚拟机的基础面试题程序计数器Java虚拟机栈本地方法栈Java堆方法区程序计数器程序计数器是线程私有的,并且是JVM中唯一不会溢出的区域,用来保存线程切换时的执行行数程序计数器(ProgramCounterRegister)是一块较小的内存空间,可以看作是当前线程所执行字节码的行号指示器。分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器完成。由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式实现的。为了线程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,各线程之间的计数器互不影响,独立存

为什么这11道JVM面试题这么重要(附答案)

本文内容整理自博学谷狂野架构师运行时数据区都包含什么虚拟机的基础面试题程序计数器Java虚拟机栈本地方法栈Java堆方法区程序计数器程序计数器是线程私有的,并且是JVM中唯一不会溢出的区域,用来保存线程切换时的执行行数程序计数器(ProgramCounterRegister)是一块较小的内存空间,可以看作是当前线程所执行字节码的行号指示器。分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器完成。由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式实现的。为了线程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,各线程之间的计数器互不影响,独立存

JVM中的进程和线程

JVM中的进程和线程介绍一个进程可以有很多个线程,进程之间基本上都是独立的,但是同一进程中的不同线程很可能会相互影响。每个线程有自己的程序计数器、虚拟机栈和本地方法栈。进程的几种状态创建状态(New):进程刚刚被创建。就绪状态(Ready):进程已经准备运行,此时进程在等待处理器资源,除了处理资源以外所需要的资源已经全部获得,准备完毕,一旦处理器分配资源,即会立即运行。运行状态(Running):进程正在运行。等待状态(Waiting):又称为阻塞状态,进程目前暂停运行,等待某一事件完成,例如等待I/O请求。结束状态(Terminated):进程结束,可能是出现错误、人为终止、正常结束或者被系

JVM中的进程和线程

JVM中的进程和线程介绍一个进程可以有很多个线程,进程之间基本上都是独立的,但是同一进程中的不同线程很可能会相互影响。每个线程有自己的程序计数器、虚拟机栈和本地方法栈。进程的几种状态创建状态(New):进程刚刚被创建。就绪状态(Ready):进程已经准备运行,此时进程在等待处理器资源,除了处理资源以外所需要的资源已经全部获得,准备完毕,一旦处理器分配资源,即会立即运行。运行状态(Running):进程正在运行。等待状态(Waiting):又称为阻塞状态,进程目前暂停运行,等待某一事件完成,例如等待I/O请求。结束状态(Terminated):进程结束,可能是出现错误、人为终止、正常结束或者被系