草庐IT

【JVM】jvm的双亲委派机制

双亲委派机制一、JVM体系结构二、双亲委派机制的含义三、双亲委派机制的源代码四、双亲委派机制的意义五、示例代码一、JVM体系结构我们先在这里放一张JVM的体系架构图,方便我们有个总体认知。在了解JVM的双亲委派机制之前,你不得不需要知道的几个名字:本文我们只讲上图中里的类加载子系统下的三个阶段之一(Loading,加载阶段)有关的内容,即下图中用红色线圈起来的几个名词。引导类加载器(BootstrapClassLoader);扩展类加载器(ExtensionClassLoader);应用类加载器(ApplicationClassLoader)。有关其详细概念请移步至:【JVM】java的jvm

【JVM】jvm的双亲委派机制

双亲委派机制一、JVM体系结构二、双亲委派机制的含义三、双亲委派机制的源代码四、双亲委派机制的意义五、示例代码一、JVM体系结构我们先在这里放一张JVM的体系架构图,方便我们有个总体认知。在了解JVM的双亲委派机制之前,你不得不需要知道的几个名字:本文我们只讲上图中里的类加载子系统下的三个阶段之一(Loading,加载阶段)有关的内容,即下图中用红色线圈起来的几个名词。引导类加载器(BootstrapClassLoader);扩展类加载器(ExtensionClassLoader);应用类加载器(ApplicationClassLoader)。有关其详细概念请移步至:【JVM】java的jvm

GraalVM入门以及环境搭建

目录前言一、前期准备二、配置步骤1.解压GraalVM2.配置环境变量3.安装native-image(需要科学上网)4.安装VisualStudio的C++桌面开发环境5.测试总结前言GraalVM是开发人员编写和执行Java代码的工具。具体来说,GraalVM是由Oracle创建的Java虚拟机(JVM)和Java开发工具包(JDK)。它是一个高性能的运行时,可以提高应用程序的性能和效率。GraalVM的目标包括:编写一个更快、更易于维护的编译器,提高在JVM上运行的语言的性能,减少应用程序启动时间,将多语言支持集成到Java生态系统中,以及为此提供一组编程工具。GraalVM向JDK添加

GraalVM入门以及环境搭建

目录前言一、前期准备二、配置步骤1.解压GraalVM2.配置环境变量3.安装native-image(需要科学上网)4.安装VisualStudio的C++桌面开发环境5.测试总结前言GraalVM是开发人员编写和执行Java代码的工具。具体来说,GraalVM是由Oracle创建的Java虚拟机(JVM)和Java开发工具包(JDK)。它是一个高性能的运行时,可以提高应用程序的性能和效率。GraalVM的目标包括:编写一个更快、更易于维护的编译器,提高在JVM上运行的语言的性能,减少应用程序启动时间,将多语言支持集成到Java生态系统中,以及为此提供一组编程工具。GraalVM向JDK添加

arthes—线上debug好帮手

arthes简介以下是arthes官网原文:通常,本地开发环境无法访问生产环境。如果在生产环境中遇到问题,则无法使用IDE远程调试。更糟糕的是,在生产环境中调试是不可接受的,因为它会暂停所有线程,导致服务暂停。开发人员可以尝试在测试环境或者预发环境中复现生产环境中的问题。但是,某些问题无法在不同的环境中轻松复现,甚至在重新启动后就消失了。如果您正在考虑在代码中添加一些日志以帮助解决问题,您将必须经历以下阶段:测试、预发,然后生产。这种方法效率低下,更糟糕的是,该问题可能无法解决,因为一旦JVM重新启动,它可能无法复现,如上文所述。Arthas旨在解决这些问题。开发人员可以在线解决生产问题。无需

arthes—线上debug好帮手

arthes简介以下是arthes官网原文:通常,本地开发环境无法访问生产环境。如果在生产环境中遇到问题,则无法使用IDE远程调试。更糟糕的是,在生产环境中调试是不可接受的,因为它会暂停所有线程,导致服务暂停。开发人员可以尝试在测试环境或者预发环境中复现生产环境中的问题。但是,某些问题无法在不同的环境中轻松复现,甚至在重新启动后就消失了。如果您正在考虑在代码中添加一些日志以帮助解决问题,您将必须经历以下阶段:测试、预发,然后生产。这种方法效率低下,更糟糕的是,该问题可能无法解决,因为一旦JVM重新启动,它可能无法复现,如上文所述。Arthas旨在解决这些问题。开发人员可以在线解决生产问题。无需

JavaEE-线程安全问题

1.线程安全的概念如果多线程环境下代码运行的结果是符合我们预期的,即在单线程环境应该的结果,则说这个程序是线程安全的.为啥会出现线程安全问题?本质原因:线程在系统中的调度是无序的/随机的(抢占式执行).2.开始说明先看个线程不安全的例子://线程不安全classCounter{privateintcount=100000;privateObjectlocker=newObject();publicvoidadd(){synchronized(locker){count++;}}publicvoidsub(){count--;}publicintget(){returncount;}}publi

JavaEE-线程安全问题

1.线程安全的概念如果多线程环境下代码运行的结果是符合我们预期的,即在单线程环境应该的结果,则说这个程序是线程安全的.为啥会出现线程安全问题?本质原因:线程在系统中的调度是无序的/随机的(抢占式执行).2.开始说明先看个线程不安全的例子://线程不安全classCounter{privateintcount=100000;privateObjectlocker=newObject();publicvoidadd(){synchronized(locker){count++;}}publicvoidsub(){count--;}publicintget(){returncount;}}publi

JVM详解——内存结构

文章目录内存结构1、运行时数据区2、虚拟机栈3、本地方法栈4、程序计数器5、堆6、方法区7、运行时常量池8、内存溢出和内存泄漏9、堆溢出内存结构1、运行时数据区Java虚拟机在运行Java程序期间将管理的内存划分为不同的数据区,不同的区域负责不同的职能,有各自的生命周期,这些区域统称为运行时数据区。从线程私有和共享的角度区分:线程私有:程序计数器、Java虚拟机栈、本地方法栈线程共享:堆、方法区栈是运行时的单位,而堆是存储的单位​。栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放、放在哪。2、虚拟机栈作用:虚拟机栈也称为Java栈,主要管理Jav

JVM详解——内存结构

文章目录内存结构1、运行时数据区2、虚拟机栈3、本地方法栈4、程序计数器5、堆6、方法区7、运行时常量池8、内存溢出和内存泄漏9、堆溢出内存结构1、运行时数据区Java虚拟机在运行Java程序期间将管理的内存划分为不同的数据区,不同的区域负责不同的职能,有各自的生命周期,这些区域统称为运行时数据区。从线程私有和共享的角度区分:线程私有:程序计数器、Java虚拟机栈、本地方法栈线程共享:堆、方法区栈是运行时的单位,而堆是存储的单位​。栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放、放在哪。2、虚拟机栈作用:虚拟机栈也称为Java栈,主要管理Jav