JVM
hello_cmy
这个作者很懒,什么都没留下…
展开
-
Java对象的创建过程
在虚拟机的运行时数据区中,大家都知道有一个运行时常量池,那么常量池中都包含什么内容呢?先来看一下:开始正文:1、类加载检查:当虚拟机遇到一条字节码new指令时,首先会去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否被加载过、解析和初始化过。如果没有,那必须先执行相应的类加载过程。2、分配内存:在类加载检查通过后,接下来虚拟机将会为新生对象...原创 2020-05-05 18:53:19 · 247 阅读 · 0 评论 -
垃圾收集算法
目录1、标记-清除算法2、标记-复制算法3、标记-整理算法4、分代收集先来看几个名词,对整体有个了解。部分收集(Partial GC):指目标不是完整收集整个Java堆的垃圾收集,其中又分为:新生代收集(Minor GC/Young GC):指目标只是新生代的垃圾收集。老年代收集(Major GC/Old GC):指目标只是老年代的垃圾收集。混合收集(Mixed GC): 指目标是收...原创 2020-05-04 19:10:22 · 199 阅读 · 0 评论 -
如何判断一个类是无用的类?
方法区主要回收的是无用的类,那么如何判断一个类是无用的类的呢?判定一个常量是否是“废弃常量”比较简单,而要判定一个类是否是“无用的类”的条件则相对苛刻许多。类需要同时满足下面3个条件才能算是 “无用的类” :该类所有的实例都已经被回收,也就是 Java 堆中不存在该类的任何实例。加载该类的 ClassLoader 已经被回收。该类对应的 java.lang.Class 对象没有在任何地方...原创 2020-05-04 09:26:51 · 290 阅读 · 0 评论 -
如何判断一个常量是废弃常量?
运行时常量池主要回收的是废弃的常量。假如在常量池中存在字符串 “abc”,如果当前没有任何String对象引用该字符串常量的话,就说明常量 “abc” 就是废弃常量,如果这时发生内存回收的话而且有必要的话,“abc” 就会被系统清理出常量池。...原创 2020-05-04 09:07:01 · 648 阅读 · 0 评论 -
虚拟机-----强引用,软引用,弱引用,虚引用
目录强引用(Strongly Reference)软引用(Soft Reference)弱引用(Weak Reference)虚引用(Phantom Reference)无论是通过引用计数法判断对象引用数量,还是通过可达性分析法判断对象的引用链是否可达,判定对象的存活都与“引用”有关。JDK1.2之前,Java中引用的定义很传统:如果reference类型的数据中存储的数值代表的是另一块内存的...原创 2020-05-01 10:32:23 · 180 阅读 · 0 评论 -
如何判断对象是否死亡?(两种方法)
如何判断对象是否死亡?(两种方法)堆中几乎存放着所有的对象实例,对堆垃圾回收前的第一步就是要判断那些对象需要回收(也就是死亡,不能再被任何途径使用的对象)。有两种方法来判断。1、引用计数法在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器就减1;任何时刻计数器为0的对象就是不可能再被使用的。我们能看出来引用计数法原理简单,判定高效,但是在Java领域...原创 2020-05-01 09:45:51 · 1880 阅读 · 1 评论 -
JMM
JMM对 volatile的理解Volatile是Java虚拟机提供轻量级同步机制。1、保证可见性。2、不保证原子性3、禁止指令重排什么是JMMJMM:Java内存模型,不存在的东西。来屏蔽各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。在此之前,主流程序(如C 和C++等)直接使用物理硬件和操作系统的内存模型。因此,由于不同...原创 2020-04-07 13:00:37 · 299 阅读 · 0 评论 -
类加载器和双亲委派机制
什么是类加载器Java类加载器是Java运行时环境的一部分,负责动态加载Java类到Java虚拟机的内存空间中。类通常是按需加载,即第一次使用该类时才加载。由于有了类加载器,Java运行时系统不需要知道文件与文件系统。它是干什么的类加载器它是在虚拟机中完成的,负责动态加载Java类到Java虚拟机的内存空间中,在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件...原创 2020-04-02 13:20:55 · 122 阅读 · 0 评论 -
JVM运行时数据区
JVM运行时数据区Java虚拟机在执行Java程序的过程中会把它管理的内存分为若干个不同的数据区域。这些区域有着各自的用途,一级创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范》中规定,jvm所管理的内存大致包括以下几个运行时数据区域,如下图所示:灰色区域(方法区,堆):由所有线程共享。白色区域(虚拟机栈,本地方...原创 2020-04-01 12:43:13 · 343 阅读 · 0 评论 -
JVM的体系结构
看一下JVM的架构。JVM字节码文件(JVM Languages Classes )包括但不仅限于Java语言编译而成的Class文件。实际上,Java虚拟机不和包括Java在内的任何编程语言绑定,它只与“Class文件”这种特定的二进制文件格式关联,只要特定语言的编译器能将代码编译成Class文件,虚拟机并不关心Class的来源是何种语言,如下图所示类加载器(Class Load...原创 2020-03-25 11:42:56 · 100 阅读 · 0 评论 -
JVM的位置
JVM介绍JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节...原创 2020-03-25 11:22:20 · 1535 阅读 · 0 评论