
JVM
文章平均质量分 85
jvm
..Serendipity
唯一不变的是变化本身
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
垃圾回收相关概念
1. System.gc()的理解在默认情况下,通过system.gc()或者Runtime.getRuntime().gc() 的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。然而System.gc() 调用附带一个免责声明,无法保证对垃圾收集器的调用。(不能确保立即生效,即相当于提醒垃圾回收器进行垃圾回收。能不能马上执行呢是不一定的)JVM实现者可以通过System.gc() 调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动进行的,无须手动原创 2022-01-05 14:07:32 · 143 阅读 · 0 评论 -
垃圾回收相关算法
0. 对象存活判断在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为己经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我们可以称为垃圾标记阶段。那么在JVM中究竟是如何标记一个死亡对象呢?简单来说,当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡。判断对象存活一般有两种方式:引用计数算法***和***可达性分析算法。1. 标记阶段:引用计数法2. 标记阶段:可达性分析原创 2022-01-04 17:28:48 · 92 阅读 · 0 评论 -
垃圾回收概述
1. 什么是垃圾垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。关于垃圾收集有三个经典问题:哪些内存需要回收?什么时候回收?如何回收?垃圾收集机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,Java的垃圾收集机制仍然在不断的演进中,不同大小的设备、不同特征的应用场景,对垃圾收集提出了新的挑战,这当然也是面试的热点。1.1 大厂面试题1.2 什么是垃圾?垃原创 2022-01-03 16:32:56 · 90 阅读 · 0 评论 -
String Table
1. String的基本特性1.1 String的特征String:字符串,使用一对" "引起来表示 或者 new String()String: 声明为final的,不可被继承String: 实现了Serializable接口:表示字符串是支持序列化的。String: 实现了Comparable接口:表示string可以比较大小String: 在jdk8及以前内部定义了final char[] value用于存储字符串数据。JDK9时改为byte[]1.2 String在jdk9中存储原创 2022-01-03 15:31:37 · 155 阅读 · 0 评论 -
执行引擎.
+# 1.执行引擎概述执行引擎属于JVM的下层,里面包括解释器及时编译器垃圾回收器执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是***物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的***,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操原创 2022-01-02 14:20:14 · 106 阅读 · 0 评论 -
直接内存.
直接内存概述不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。直接内存是在Java堆外的、直接向系统申请的内存区间。来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存。通常,访问直接内存的速度会优于Java堆,即读写性能高。因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存。Java的NIO库允许Java程序使用直接内存,用于数据缓冲区非直接缓存区使用IO读写文件,需要与磁盘交互,需要由用户态切换到内核态。在内核态时,需要两份内存存原创 2021-12-30 14:04:52 · 106 阅读 · 0 评论 -
对象的实例化、内存布局与访问定位
对象的实例化大厂面试题美团:对象在JVM中是怎么存储的?对象头信息里面有哪些东西?蚂蚁金服:Java对象头有什么?图示new:最常见的方式、Xxx的静态方法(单例模式),XxxBuilder/XxxFactory的静态方法(工厂模式)Class的newInstance方法:反射的方式,只能调用空参的构造器,权限必须是public jdk8之后已经不推荐使用,因为使用条件苛刻Constructor的newInstance(XXX):反射的方式,可以调用空参、带参的构造器,权限没有要求原创 2021-12-30 13:43:32 · 85 阅读 · 0 评论 -
方法区..
栈,堆,方法区的交互关系方法区的理解方法区在哪里?《Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。”但对于HotSpotJVM而言,方法区还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开。所以,方法区看作是一块独立于Java堆的内存空间。方法区的基本理解方法区(Method Area)与Java堆一样,是各个线程共享的内存区域。方法区在JVM启动的时候被创建,并且它的实际的物理内存空间中和J原创 2021-12-26 09:38:04 · 183 阅读 · 0 评论 -
堆....
1.堆的核心概述图解一个进程就对应着一个JVM实例,一个JVM实例中就有一个运行时数据区,运行时数据区包含一个堆和方法区。程序计数器,本地方法栈,虚拟机栈是线程私有的,不同的线程有着不同的程序计数器,本地方法栈,虚拟机栈,但是他们都共享堆和方法区。核心概述一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。 堆内存的大小是可以调节的。《Java虚拟机规范》规定,堆可以处于物理原创 2021-12-20 10:12:44 · 385 阅读 · 0 评论 -
本地方法接口与本地方法栈
本地方法接口简单地讲,一个Native Method是一个Java调用非Java代码的接囗。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C中,你可以用extern “c” 告知c编译器去调用一个c的函数。A native method is a Java method whose implementation is provided by non-java code.意思就是:本地方原创 2021-12-19 09:30:00 · 126 阅读 · 0 评论 -
虚拟机栈.
概述虚拟机栈出现的背景:由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。内存中的栈和堆栈是运行时的单位,而堆是存储的单位1. 栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。2. 堆解决的是数据存储的问题,即数据怎么放,放哪里3. 也不一定是全部数据都存放于堆中,比如方法的一些基本类型的局部变量放在栈中java虚拟机栈是什么Java虚原创 2021-12-18 10:00:12 · 913 阅读 · 0 评论 -
程序计数器(PC寄存器)
介绍可以看到程序计数器是基于每一个线程的,每一个线程都有一个程序计数器。JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。作用PC寄存器用来存储指向下一条指令的地址,原创 2021-12-15 19:22:44 · 1199 阅读 · 0 评论 -
运行时数据区
运行时数据区图解内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。结合JVM虚拟机规范,来探讨一下经典的JVM内存布局。...原创 2021-12-15 18:43:13 · 677 阅读 · 0 评论 -
jvm-类加载子系统
类加载子系统我们将字节码文件经过类加载子系统加载到内存(运行时数据区)中,在加载的过程中又分成了3个具体的环节加载阶段:这个环节需要引导类加载器,扩展类加载器,应用加载器,当然我们也可以自定义加载器。链接阶段:这个阶段有验证,准备和解析初始化本文主要叙述类加载器,对运行时数据区不做过多的叙述。类加载器子系统的作用类加载器子系统负责从文件系统或者网络中加载class文件,class文件在文件开头有特定的文件标识classLoader只负责class文件的加载,至于他是否能够运行则有Ex原创 2021-12-15 18:26:41 · 117 阅读 · 0 评论 -
初始jvm
jvm的整体结构外部的class文件被Class Loader加载到内存中,生成一个class对象实例,这其中会涉及到加载,链接,初始化等等。方法区和堆在内存中被多个线程共享,java栈,本地方法栈以及程序计数器是每个线程独享一份的。执行引擎分为解释器,即时编译器,垃圾回收器等,class文件被加载到内存中,就会被执行引擎解释运行。因为我们的java程序编译后变为字节码指令进入内存,但是我们的操作系统是不识别字节码指令的,所以执行引擎就可以将字节码指令转换为操作系统可识别执行的机器指令。.原创 2021-12-14 15:31:12 · 1112 阅读 · 0 评论