![](https://img-blog.csdnimg.cn/20200909195841512.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
JavaSE-JVM☆
来自尚硅谷JVM
喵先生呢
优秀的人哪都好,唯一的缺点是让人觉得自己是个垃圾。
展开
-
18. JVM之垃圾回收器
文章目录垃圾回收器1. GC分类与性能指标1.1 垃圾回收器概述1.2 垃圾回收器分类按线程数分按工作模式分按碎片处理方式分按工作的内存区间分1.3 评估GC的性能指标性能指标—吞吐量性能指标—暂停时间吞吐量vs暂停时间2. 不同的垃圾回收器概述2.1 垃圾回收器发展史2.2 7种经典的垃圾收集器2.3 7款经典收集器与垃圾分代之间的关系2.4 垃圾收集器的组合关系☆2.5 如何查看默认垃圾收集器3. Serial回收器—串行回收3.1 Serial回收器小结4. ParNew回收器—并行回收5. Para原创 2020-10-30 16:08:05 · 315 阅读 · 0 评论 -
17. JVM之垃圾回收相关概念
JVM实现者可以通过system.gc() 调用来决定JVM的GC行为。 严格来说,只有对象不会再被程序用到了,但是GC又不能回收他们的情况,才叫内存泄漏。 Stop-The-World,简称STW,指的是GC事件发生过程中,会产生应用程序的停顿。停顿产生时整个应用程序线程都会被暂停,没有任何响应,有点像卡死的感觉,这个停顿称为STW。 我们希望能描述这样一类对象:当内存空间还足够时,则能保留在内存中;如果内存空间在进行垃圾收集后还是很紧张,则可以抛弃这些对象。原创 2020-10-25 22:46:08 · 176 阅读 · 0 评论 -
16. JVM之垃圾回收相关算法
不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率。一般是把Java堆分为新生代和老年代,这样就可以根据各个年代的特点使用不同的回收算法,以提高垃圾回收的效率。原创 2020-10-24 13:48:35 · 318 阅读 · 0 评论 -
15. JVM之垃圾回收概述
自动内存管理,无需开发人员手动参与内存的分配与回收,这样降低内存泄漏和内存溢出的风险。 没有垃圾回收器,java也会和cpp一样,各种悬垂指针,野指针,泄露问题让你头疼不已。 自动内存管理机制,将程序员从繁重的内存管理中释放出来,可以更专心地专注于业务开发。原创 2020-10-23 14:15:59 · 177 阅读 · 0 评论 -
14. JVM之StringTable
String类的当前实现将字符存储在char数组中,每个字符使用两个字节(16位)。从许多不同的应用程序收集的数据表明,字符串是堆使用的主要组成部分,而且,大多数字符串对象只包含拉丁字符。这些字符只需要一个字节的存储空间,因此这些字符串对象的内部char数组中有一半的空间将不会使用....原创 2020-10-22 19:42:24 · 218 阅读 · 0 评论 -
13. JVM之执行引擎
执行引擎属于JVM的下层,里面包括 解释器、及时编译器、垃圾回收器。原创 2020-10-21 22:01:52 · 210 阅读 · 0 评论 -
12. JVM之直接内存
直接内存是在Java堆外的、直接向系统申请的内存区间。 来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存。 通常,访问直接内存的速度会优于Java堆。即读写性能高。 因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存。 Java的NIO库允许Java程序使用直接内存,用于数据缓冲区。原创 2020-10-21 22:00:13 · 140 阅读 · 0 评论 -
11. 对象实例化、内存布局与访问定位
文章目录对象实例化、内存布局与访问定位1. 对象实例化1.1 创建对象的方式1.2 创建对象的步骤一、判断对象对应的类是否加载、链接、初始化二、为对象分配内存三、处理并发问题四、初始化分配到的空间五、设置对象的对象头六、执行init方法进行初始化小结2. 对象内存布局2.1 小结3. 对象的访问定位3.1 对象访问的两种方式一、句柄访问二、直接指针(HotSpot采用)☆ 对象实例化、内存布局与访问定位 对象在JVM中是怎么存储的? 对象头信息里面有哪些东西? Java对象头里有什么? 1. 对象实原创 2020-10-19 16:00:21 · 213 阅读 · 0 评论 -
10. JVM之深入理解方法区
《Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。”但对于HotSpot JVM而言,方法区还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开。 所以,方法区看作是一块独立于Java堆的内存空间。原创 2020-10-18 21:43:12 · 201 阅读 · 0 评论 -
9. JVM之深入理解堆
堆针对一个JVM进程来说是唯一的,也就是一个进程只有一个JVM,但是进程包含多个线程,他们是共享同一堆空间的。 Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。 《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。原创 2020-09-27 21:48:55 · 172 阅读 · 0 评论 -
8. JVM本地方法栈和本地方法接口
一个Native Method是一个Java调用非Java代码的接囗。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。原创 2020-09-15 20:25:50 · 137 阅读 · 0 评论 -
7. JVM虚拟机栈
Java虚拟机栈(Java Virtual Machine Stack),早期也叫Java栈。每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的Java方法调用。 Java虚拟机栈是线程私有的,生命周期和线程一致,也就是线程结束了,该虚拟机栈也销毁了。原创 2020-09-15 19:41:20 · 235 阅读 · 0 评论 -
6. JVM程序计数器
它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域。 它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。字节码解释器工作时就是通过改变这个计数器原创 2020-09-12 16:23:15 · 141 阅读 · 0 评论 -
5. JVM运行时数据区概述
Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区:其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另外一些则是与线程一一对应的,这些与线程对应的数据区域会随着线程开始和结束而创建和销毁。原创 2020-09-12 15:40:31 · 133 阅读 · 0 评论 -
4. JVM-类加载子系统
类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。 ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。 加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是class文件中常量池部分的内存映射)原创 2020-09-11 21:30:29 · 417 阅读 · 0 评论 -
3. JVM发展历程
目前Hotspot占有绝对的市场地位,称霸武林。 不管是现在仍在广泛使用的 JDK6,还是使用比例较多的 JDK8 中,默认的虚拟机都是HotSpot Sun/Oracle JDK 和openJDK的默认虚拟机。 因此本课程中默认介绍的虚拟机都是HotSpot,相关机制也主要是指Hotspot的GC机制。(比如其他两个商用虚拟机都没有方法区的概念) 从服务器、桌面到移动端、嵌入式都有应用。 名称中的HotSpot指的就是它的热点代码探测技术。原创 2020-09-10 20:52:14 · 405 阅读 · 0 评论 -
2. JVM架构及其生命周期
由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。 优点是跨平台,指令集小,编译器容易实现; 缺点是性能下降,实现同样的功能需要更多的指令。原创 2020-09-09 22:55:20 · 207 阅读 · 0 评论 -
1. Java及JVM简介
天下事有难易乎? 为之,则难者亦易矣;不为,则易者亦难矣原创 2020-09-09 22:23:14 · 327 阅读 · 0 评论