深入理解Java虚拟机
文章平均质量分 72
你是否曾经想要深入了解Java虚拟机?想要了解Java程序在运行时的内部工作原理?那么你来对地方了!本专栏将带你深入理解Java虚拟机,从底层原理到实际应用,逐步揭示Java程序的运行机制和优化技巧。无论你是Java开发工程师还是Java爱好者,都能从中受益匪浅。让我们一起探索Java虚拟机的奥秘吧
Java-You
发现更优秀的自己,我们不是程序员,我们是一名优秀的软件设计师!
展开
-
《垃圾回收器:Java虚拟机内存管理的秘密武器》
串行回收器: Serial、Serial old并行回收器: ParNew、Parallel Scavenge、Parallel old并发回收器:CMS、G1。原创 2022-09-14 08:47:14 · 10999 阅读 · 0 评论 -
《Java虚拟机内幕揭秘:垃圾回收的奇妙世界》
问题:调用System.gc()并不会马上执行垃圾回收操作,为什么上述例子中,每次调用都会有垃圾回收信息输出?是进行了GC吗?原创 2022-09-14 08:46:04 · 11029 阅读 · 1 评论 -
《摆脱垃圾:探究Java虚拟机垃圾回收算法》
为了解决这个问题,即对实时垃圾收集算法的研究直接导致了增量收集(Incremental collecting)算法的诞生。状态下,应用程序所有的线程都会挂起,暂停一切正常的工作,等待垃圾回收的完成。如果一次性将所有的垃圾进行处理,需要造成系统长时间的停顿,那么就可以让垃圾收集线程和应用程序线程交替执行。在HotSpot中,基于分代的概念,Gc所使用的内存回收算法必须结合年轻代和老年代各自的特点。上述现有的算法,在垃圾回收过程中,应用软件将处于一种stop the world的状态。原创 2022-09-14 08:45:08 · 10975 阅读 · 0 评论 -
《Java垃圾回收机制:从诞生到现在的演进史!》
垃圾回收器可以对年轻代回收,也可以对老年代回收,甚至是全堆和方法区的回收。(img-Lm56TeBi-1663116224159)]自动内存管理机制,将程序员从繁重的内存管理中释放出来,可以。自动内存管理无需开发人员手动参与内存的分配与回收,这样。原创 2022-09-14 08:44:16 · 10842 阅读 · 0 评论 -
《Java虚拟机内存分配秘籍:StringTable大揭秘!》
string:字符串使用一对""引起来表示。string声明为final的,不可被继承string实现了serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示string可以比较大小string在jdk8及以前内部定义了final char[ ] value用于存储字符串数据。jdk9时改为byte[ ]string:代表不可变的字符序列。简称:不可变性。当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值。原创 2022-09-14 08:43:34 · 11022 阅读 · 0 评论 -
《深入Java虚拟机:揭秘执行引擎的奥秘》
执行引擎概述执行引擎是java虚拟机核心的组成部分之一。物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只是一些能够被JVM所识别的字节码指令、符号表,以及其他辅助信息。原创 2022-09-14 08:42:17 · 11015 阅读 · 1 评论 -
《探秘Java虚拟机:解密直接内存的神秘面纱》
直接内存概述不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。直接内存是在Java堆外的、直接向系统申请的内存区间。来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存通常,访问直接内存的速度会优于Java堆。即读写性能高。因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存。Java的NIO库允许Java程序使用直接内存,用于数据缓冲也可能导致outofMemoryError异常Exception in原创 2022-09-14 08:42:03 · 11035 阅读 · 0 评论 -
《深入Java虚拟机:解密对象实例化内存布局与访问定位》
测试对象实例化的过程 ① 加载类元信息 - ② 为对象分配内存 - ③ 处理并发问题 - ④ 属性的默认初始化(零值初始化) ⑤ 设置对象头的信息 - ⑥ 属性的显式初始化、代码块中初始化、构造器中初始化 给对象的属性赋值的操作: ① 属性的默认初始化 - ② 显式初始化 / ③ 代码块中初始化 - ④ 构造器中初始原创 2022-09-13 11:26:36 · 11101 阅读 · 0 评论 -
《Java虚拟机:方法区的黑科技剖析》
方法区的理解- 方法区看作是一块独立于Java堆的内存空间。- 方法区(Method Area)与Java堆一 样, 是各个线程共享的内存区域。- 方法区在JVM启动的时候被创建,并且它的实际的物理内存空间中和Java堆区--样都可以是不连续的。.- 方法区的大小,跟堆空间- -样,可以选择固定大小或者可扩展。- 方法区的大小决定了系统可以保存多少个类,如果系统定义了太多的类,导致方法区溢出,虚拟机同样会抛出内存溢出错误: java. lang. OutOfMemoryError:原创 2022-09-13 11:23:18 · 11036 阅读 · 0 评论 -
《自由穿梭的Java虚拟机堆内存:一场关于内存管理的盛宴》
一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。堆内存的大小是可以调节的。《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区( ThreadLocal Allocation Buffer,TLAB)。原创 2022-09-13 11:21:25 · 11085 阅读 · 0 评论 -
《深入剖析Java虚拟机本地方法栈:管理本地方法调用的关键》
本地方法栈(Native Method Stack)Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法的调用。- 本地方法栈,也是线程私有的。- 允许被实现成固定或者是可动态扩展的内存大小。(在内存溢出方面是相同的) - 如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将会抛出一个stackoverflowError异常。 - 如果本地方法栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去原创 2022-09-13 11:19:19 · 11066 阅读 · 0 评论 -
《穿越程序界的桥梁:Java本地方法接口实战》
什么是本地方法?- 简单地讲,一个Native Method就是一个Java调用非Java代码的接口。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比c。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在c++中,你可以用extern "c"告知C++编译器去调用一个c的函数。原创 2022-09-13 11:17:54 · 11104 阅读 · 0 评论 -
《Java虚拟机:轻便高效的跨平台神器——探秘虚拟机栈》
虚拟机栈出现的背景由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。内存中的栈与堆栈是运行时的单位,堆是存储的单位即:栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放、放在哪儿。原创 2022-09-13 11:16:13 · 10752 阅读 · 0 评论 -
《程序计数器:指引Java程序的下一步,解锁执行引擎的奥秘》、
JVM中的程序计数寄存器(Program counter Register)中, Register 的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为pc计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域。在JVM规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致。原创 2022-09-13 11:14:00 · 11115 阅读 · 0 评论 -
《深入探究Java虚拟机:运行时数据区大揭秘》
03_运行时数据区概述及线程;内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。。结合JVM虚拟机规范,来探讨一下经典的JVM内存布局。原创 2022-09-13 11:12:48 · 11146 阅读 · 0 评论 -
《探秘Java虚拟机:类加载子系统的神秘世界》
《JVM学习笔记》02_类加载子系统; String类使用引导类加载器进行加载的。原创 2022-09-13 11:10:20 · 10781 阅读 · 0 评论 -
《Java虚拟机解密:探究JVM与Java体系结构的奥秘》
《深入理解JVM虚拟机》JVM与Java体系结构java字节码,指的是用java语言编译成的字节码。准确的说任何能在jvm平台上执行的字节码格式都是一样的。所以应该统称为:jvm字节码。不同的编译器,可以编译出相同的字节码文件,字节码文件也可以在不同的JVM上运行。Java虚拟机与Java 语言并没有必然的联系,它只与特定的二进制文件格式—class文件格式所关联,class 文件中包含了Java 虚拟机指令集(或者称为字节码、Bytecodes)和符号表,还有一些其他辅助信息。原创 2022-09-13 10:17:41 · 11494 阅读 · 0 评论