![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
Insane'
这个作者很懒,什么都没留下…
展开
-
垃圾回收器
1、GC分类与性能指标垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。分类按线程数分,可以分为串行垃圾回收器和并行垃圾回收器。串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直至垃圾收集工作结束。在诸如单CPU处理器或者较小的应用内存等硬件平台不是特别优越的场合,串行回收器的性能表现可原创 2020-08-13 15:20:48 · 137 阅读 · 0 评论 -
垃圾回收相关概念的概述
1、System.gc()的理解在默认情况下,通过System. gc ()或者Runtime . getRuntime() .gc()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。然而System. gc ()调用附带一个 免责声明,无法保证对垃圾收集器的调用(不能确定每次都调用成功)。JVM实现者可以通过System. gc ()调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动进行的,无须手动触发,否则就太过于麻烦了。在一些特殊情况原创 2020-08-07 16:39:04 · 219 阅读 · 0 评论 -
垃圾回收相关算法
1、标记阶段:引用计数算法2、标记阶段:可达性分析算法3、对象的finalization机制4、MAT与JProfiler的GC Roots溯源5、清除阶段:标记清除算法6、清除阶段:复制算法7、清除阶段:标记-压缩算法8、小结9、分代收集算法10、增量收集算法、分区算法...原创 2020-08-04 16:51:34 · 183 阅读 · 0 评论 -
垃圾回收概述
1、什么事垃圾垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。甚至可能导致内存溢出。2、为什么需要GC防止内存被消耗完以便JVM将整理出的内存分配给新的对象。随着应用程序所应付的业务越来越庞大、复杂,用户越来越多,没有GC就不能保证应用程序的正常进行。而经常造成STW的GC又跟不上实际的需求,所以才会不断地尝试对GC进行优化。3、早期垃圾原创 2020-08-03 15:41:53 · 253 阅读 · 0 评论 -
StringTable
1、String的基本特性String:字符串,使用一对" "引起来表示。String声明为final的, 不可被继承String实现了Serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示String可以比较大小String在jdk8及以前内部定义了final char[ ] value用于存储字符串数据。jdk9时改为byte [ ]String:代表不可变的字符序列。简称:不可变性。当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的val原创 2020-07-31 17:40:58 · 127 阅读 · 0 评论 -
执行引擎
1、执行引擎概述执行引擎内部结构图执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是-一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面.上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅原创 2020-07-24 13:24:32 · 703 阅读 · 1 评论 -
对象的实例化、对象的内存布局、对象的访问定位
1、对象的实例化虚拟机遇到一条new指令,首先去检查这个指令的参数能否在Metaspace的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化。( 即判断类元信息是否存在)。如果没有,那么在双亲委派模式下,使用当前类加载器以ClassLoader+包名+类名为Key进行查找对应的.class文件。如果没有找到文件,则抛出ClassNotFoundException异常,如果找到,则进行类加载,并生成对应的Class类对象首先计算对象占用空间大小,接着在堆中划分一原创 2020-07-23 13:22:54 · 79 阅读 · 0 评论 -
运行时数据区之方法区(元空间)
1、栈、堆、方法区的交互关系1.1运行时数据区结构图从线程共享与否的角度来看1.2栈、堆、方法区的交互关系2、方法区的理解2.1方法区在哪里《Java虚拟机规范》中明确说明:尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。但对 于HotSpotJVM而言,方法区还有一个别名叫做Non- Heap (非堆),目的就是要和堆分开。所以,方法区看作是一块独立于Java堆的内存空间。方法区(Method Area)与Java堆一样,是各个线程原创 2020-07-15 15:03:02 · 948 阅读 · 0 评论 -
本地方法接口、本地方法库
怎么是本地方法?简单地讲,一个Native Method就 是一个Java调用非Java代码的接口。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern “C” 告知C++编译器去调用一个C的函数。如:public native void Native1(int x);没有方法体,因为方法体由其他语言实现。...原创 2020-07-10 15:59:20 · 343 阅读 · 0 评论 -
运行时数据区
Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另外一些则是与线程一- -对应的,这些与线程对应的数据区域会随着线程开始和结束而创建和销毁。灰色的为单独线程私有的,红色的为多个线程共享的。即:每个线程:独立包括程序计数器、栈、本地栈。线程间共享:堆、堆外内存(永久代或元空间、代码缓存)JDK1.8运行时数据区结构图:每个JVM只有一个Runtime实例。即为运行时环境,相当于内存结构的中间的那个框框:运行时环境。1、线..原创 2020-07-05 15:22:35 · 253 阅读 · 0 评论 -
虚拟机与java虚拟机
1、虚拟机所谓虚拟机(Virtual Machine), 就是一台虚拟的计算机。它是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。大名鼎鼎的Visual Box, VMware就属于系统虚拟机,它们完全是对物理计算机的仿真,提供了一个可运行完整操作系统的软件平台。程序虚拟机的典型代表就是Java虚拟机,它专门为执行单个计算机程序而设计,在Java虚拟机中执行的指令我们称为Java字节码指令。无论是系统虚拟机还是程序虚拟机,在上面运行的软件都被限制于虚原创 2020-07-03 11:26:16 · 418 阅读 · 0 评论 -
类加载子系统
1.类加载机制JVM把class文件加载到内存,并对数据校验,解析和初始化,最终形成JVM可以直接使用的java类型的过程1.1加载将class文件字节码加载到内存,并将这些静态数据转化成方法区中运行时的二进制的数据结构,在堆中生成一个代表类的java.Lang.Class,作为方法区类数据的访问入口1.2链接将java的二进制代码合并到jvm的运行状态之中的过程验证:确保加载的...原创 2019-10-23 21:31:11 · 1391 阅读 · 0 评论 -
JVM内存分析
内存分析,栈、堆、方法区1.栈1.1栈是方法执行的内存模型。每个方法被调用都会创建一个栈帧(储存局部变量)1.2JVM会为每个线程创建一个栈1.3栈属于私有,不能被线程共享,先进后出1.4系统自动分配,速度快,是一个连续的内存空间,方法执行完毕,自动释放空间2.堆2.1存放new出来的对象2.2需要垃圾回收器来回收2.3能被线程共享2.4是一个不连续的内存空间,分配灵活,速度慢...原创 2019-10-23 20:31:07 · 113 阅读 · 0 评论