![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
兴涛
春风化雨,森林拔地而起!
展开
-
数组在栈和堆中的分配
文章转载自:Java数组—栈内存与堆内存的区别(通过数组讲解)Java数组针对于Java数组,Java语言把内存分为两种:-栈内存和堆内存。栈内存:在方法中定义的一些基本类型的变量和对象的引用变量都在方法的栈内存中分配,当在一段代码块中定义一个变量时,Java就在栈内存中为这个变量分配内存空间,当超出变量的作用域后,Java会自动释放掉为该变量所分配的内存空间。堆内存:堆内存用来存放 new 运算符创建的对象和数组,在堆中分配的内存,由Java虚拟机的自动垃级回收器来管理。在堆中创建了一个数组或转载 2022-03-02 15:07:50 · 1729 阅读 · 0 评论 -
读写屏障及三色标记法
内存屏障中的读写屏障及三色标记法一、并发问题1、概述2、Volatile通过读写屏障保证可见性和有序性2.1、保证可见性2.2、保证有序性二、 垃圾回收问题1、三色标记法1.1 基本算法1.2 多标-浮动垃圾1.3 漏标-读写屏障1.3.1 写屏障(Store Barrier)(1) 写屏障 + SATB(2) 写屏障 + 增量更新1.3.2 读屏障(Load Barrier)1.4 三色标记法与现代垃圾回收器读写屏障涉及到JVM和并发编程的知识,这里放到一块来探讨一、并发问题1、概述Volatil原创 2022-02-28 11:52:08 · 541 阅读 · 0 评论 -
GC日志分析
参考资料:链接: 尚硅谷JVM全套视频.原创 2022-01-23 13:30:59 · 67 阅读 · 0 评论 -
7种垃圾回收器总结
原创 2022-01-23 11:54:40 · 106 阅读 · 0 评论 -
详解G1垃圾回收的过程
详解G1垃圾回收的过程一、回收过程概述二、回收详细过程1、年轻代GC2、并发标记过程3、混合回收过程4、Full GC过程三、G1优化建议一、回收过程概述在步骤3中,对老年代的回收不是回收整个老年代,保证可控低延迟的情况下(也就是根据程序员设置的暂停时间)回收老年代。二、回收详细过程1、年轻代GC扫描根主要是扫描GC Roots;RSet为记忆集,处理跨代引用问题所需的数据结构;dirty card queue表示:在执行引用赋值语句时,会在dirty card queue保存一个原创 2022-01-22 14:23:28 · 2570 阅读 · 0 评论 -
G1回收器特点
G1回收器特点一、优点二、缺点G1使用的是分区算法(分代收集算法是将堆按照对象的生命周期划分为不同的区间;分区算法是将整个堆划分成若干个小区间。每一个小区间都独立使用,独立回收。)详细可看博客:增量收集算法与分区算法.一、优点仍然分为年轻代、老年代,但是他不再像之前的六种经典回收器那样内存连续,G1中的分代内存是不连续的:由于G1中Region之间使用标记-复制和标记-压缩算法,所以可以避免内存碎片的情况。可预测停顿时间模型的意思是:能够支持指定在一个长度为M毫秒的时间片段内,消原创 2022-01-22 11:04:20 · 499 阅读 · 0 评论 -
评价GC的性能指标
其中吞吐量和暂停时间是重要指标,并且在后续JVM调优时会重点关注。吞吐量越高越好,吞吐量优先意味着单位时间内,暂停时间短。暂停时间优先意味着单次STW时间最短:世界上没有完美的算法,只有适合的算法。我们在设计GC算法时只能针对某一个指标进行设计,或者两者的折中。参考资料:链接: 尚硅谷JVM全套课程...原创 2022-01-21 11:15:38 · 432 阅读 · 0 评论 -
四种引用的区别及应用场景
四种引用的区别及应用场景一、四种引用概述1、强引用2、软引用3、弱引用4、虚引用一、四种引用概述针对内存问题,有一类对象,我们希望当内存充足时,可以保留它,当垃圾回收后内存仍不够用时,则可抛弃这些对象。因此Java对引用(Reference)进行了扩充:强引用、软引用、弱引用、虚引用,引用强度依次递减。其中,强引用永远不会被回收;软引用在内存不足时会被回收;弱引用在每次GC的时候被回收(发现即回收);应用场景:90%的情况下我们使用的是强引用,在缓存的时候用到软引用和弱引用,在需要告知对象被GC原创 2022-01-20 21:38:02 · 1351 阅读 · 0 评论 -
内存泄漏(Memory Leak )和内存溢出
内存泄漏(Memory Leak )一、概述二、举例1、单例模式2、 资源未关闭一、概述什么是内存泄漏:对象不被使用,并且GC无法对其回收的情况。宽泛意义上的内存泄漏:我们的对象设置了很长的生命周期,最终导致OOM的情况(对象的生命周期很长,GC不会回收,慢慢堆满了内存空间从而导致OOM,比如出现大量static修饰的变量)。二、举例1、单例模式单例模式中,单例的生命周期和程序一样长(static修饰,随着类产生而加载,随着类消失而灭亡)。如果持有外部对象引用的话,那么这个外部对象是不能被回收原创 2022-01-20 11:18:25 · 1183 阅读 · 0 评论 -
增量收集算法与分区算法
增量收集算法与分区算法一、增量收集算法1、产生背景2、基本思想3、缺点二、分区算法1、产生背景2、基本思想3、缺点除了我们学习的分代收集算法:标记-清除算法、标记-复制算法、标记-整理算法,我们现在再拓展两种算法。个人观点:算法的演进是逐渐改变前人算法的缺点,但是在改变缺点的同时也会产生新的缺点。世界上没用完美的算法,只有适合的算法。一、增量收集算法1、产生背景我们知道在垃圾回收的时候,会暂停用户线程,如果垃圾回收的时间过长则会严重影响用户体验。那么就出现了对实时垃圾回收算法的研究——增量收集算法原创 2022-01-20 10:33:42 · 422 阅读 · 0 评论 -
JVM运行时常量池和常量池的关系
运行时常量池是JVM方法区的一部分。常量池是字节码文件(.class)一部分,存储编译期间生成的字面量和引用,常量池会随着类的加载器存入到方法区中。运行时常量池相比于常量池更具有动态性。常量并不一定要在编译时才能产生,使用String.intern()方法,可以在运行期间将常量放入池中。JVM会对每一个类维护一个常量池,常量池中的每个项都是由索引值来访问的;原来在常量池中的符号引用,在运行时常量池中会有相应的真实地址;...原创 2022-01-18 16:48:55 · 304 阅读 · 0 评论 -
JVM中方法区概述
JVM中方法区概述一、概述二、方法区内部结构1、类型信息2、域(成员变量/属性)和方法信息3、类加载器信息5、javap -v 字节码文件名.class一、概述对于方法区,我们根据官方文档,可以明确的一点是:“方法区逻辑上属于堆空间,但是方法区不会像堆空间一样,进行GC和压缩”所以我们常常将方法区和堆分离开来讨论。二、方法区内部结构方法区存储被jvm加载的类型信息、常量、静态变量等数据1、类型信息2、域(成员变量/属性)和方法信息域(File)信息:方法信息:3、类加载器信息方原创 2022-01-18 16:35:07 · 727 阅读 · 0 评论 -
Error:could not create the java virtual Machine解决办法
Error:could not create the java virtual Machine解决办法出现这个错误的原因是因为环境变量没有配置好:需要PATH、CLASSPATH、JAVA_HOME1、PATH2、CLASSPATH3、JAVA_HOME原创 2022-01-18 13:39:50 · 36134 阅读 · 2 评论 -
Minor GC、Major GC和Full GC
Minor GC、Major GC和Full GC一、分代式GC概述二、GC的触发条件1、年轻代2、老年代3、Full GC一、分代式GC概述新生代和老年代在Java堆中( Java堆内存空间.),JDK8之后的永久代称为元空间,元空间在方法区中;在region中,会存在新生代和老年代混合的情况,这就需要混合收集(Mixed GC)二、GC的触发条件1、年轻代当Eden区满了才会触发Minor GC,如果Eden区未满Survivor区满时,Survivor区会向老年区进行晋升,等到原创 2022-01-18 11:36:45 · 92 阅读 · 0 评论 -
Java堆内存空间
链接: 尚硅谷JVM全套视频.原创 2022-01-13 10:56:05 · 101 阅读 · 0 评论 -
JVM中的Java虚拟机栈
JVM中的Java虚拟机栈一、虚拟机栈的基本内容1、概述2、特点二、栈的内部结构和运行原理1、内部结构2、运行原理三、局部变量表结构四、其他1、数据类型(1)基本数据类型(2)引用数据类型2、javap -v 字节码文件名.class一、虚拟机栈的基本内容1、概述Java虚拟机栈是线程私有的。每个线程在创建时都会创建一个虚拟机栈,栈内部保存一个个的栈帧。一个栈帧对应一个方法,随着方法的调用和执行完毕,相应的栈帧执行入栈和出栈。在java程序中,main方法是一个主线程。2、特点生命周期和线程保原创 2022-01-11 12:09:53 · 332 阅读 · 12 评论 -
浅谈本地方法栈与Native
Native是java访问不到的地方,属于调用底层的C语言。在本地方法栈(Native Method Stack)中,我们调用star0()方法,而star0方法中有Native关键词,代表需要访问本地方法库,中间通过本地方法接口(JNI)来实现。为什么会有这种操作呢?在Java语言创立之初,C、C++可谓是风靡全球,java语言想要立足,必须要有可调用C、C++程序的接口。随着Java语言的发展,现在不仅调用C/C++程序,也可以调用Python等语言的程序,这就可以融合不同的语言为Java所用!原创 2022-01-10 22:14:44 · 596 阅读 · 0 评论 -
获取ClassLoader的方法
链接: 尚硅谷宋红康JVM全套教程.原创 2022-01-06 21:45:06 · 360 阅读 · 0 评论 -
ClassLoader 类加载器
class字节码文件装载到JVM中后,经过ClassLoader(类装载器)生成Class模板,然后根据这个模板创建一系列实例。模板是相同的,实例是不同的。原创 2022-01-05 22:08:50 · 261 阅读 · 1 评论 -
Java代码运行的过程
链接: 尚硅谷宋红康JVM全套视频.原创 2022-01-05 21:38:15 · 138 阅读 · 0 评论 -
JVM的体系结构
链接: 尚硅谷宋红康JVM全套视频.原创 2022-01-04 22:40:05 · 102 阅读 · 0 评论