
JVM
就行222
这个作者很懒,什么都没留下…
展开
-
【JVM第八篇--垃圾回收】GC和GC算法
写在前面的话:本文是在观看尚硅谷JVM教程后,整理的学习笔记。其观看地址如下:尚硅谷2020最新版宋红康JVM教程 1、垃圾 1.1、什么是垃圾 垃圾(Garbage)在Java语言中是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。 如果不及时对内存中的垃圾进行清理,那么这些垃圾对象所占用的内存空间就会一直保留到应用程序结束,被保留的空间也无法被其他对象所使用,极可能导致内存溢出。 1.2、垃圾回收 垃圾回收(Garbage Collection)即常说的GC。GC的作用就是清理内.原创 2020-11-17 16:31:57 · 219 阅读 · 0 评论 -
【JVM第七篇】执行引擎
写在前面的话:本文是在观看尚硅谷JVM教程后,整理的学习笔记。其观看地址如下:尚硅谷2020最新版宋红康JVM教程 执行引擎是Java虚拟机中的核心组成部分。 执行引擎的作用就是解析虚拟机字节码指令,即执行一条条的代码流程,并得到执行结果。 我们可以先来看一下执行引擎在Java虚拟机中的位置, ...原创 2020-10-29 22:39:54 · 217 阅读 · 0 评论 -
【JVM第六篇--对象】对象的实例化、内存布局和访问定位
写在前面的话:本文是在观看尚硅谷JVM教程后,整理的学习笔记。其观看地址如下:尚硅谷2020最新版宋红康JVM教程 一、对象的实例化 在平常写代码的过程中,我们用class关键字定义的类只是一个类的模板,并没有产生类的对象,也没有分配内存。想要分配内存产生类对象,就要使用到一些创建对象的方式,比如常见的new关键字,虚拟机遇到new关键字,就会在内存中分配此类的内存空间,有了内存空间就可以往里面放定义好的数据并可以进行方法的调用,这就是对象的实例化。 1、创建对象的方式 (1)、new 的方式 ①new.原创 2020-10-19 23:44:28 · 405 阅读 · 0 评论 -
【JVM第五篇--运行时数据区】方法区
一、栈、堆、方法区的关系 虚拟机运行时的数据区如下所示: 即方法区是属于线程共享的内存区域。 我们可以通过如下代码来简单分析方法区和栈、堆之间的关系。 有代码: Person person = new Person(); 其对应关系图如下: 即源程序代码运行后,字节码文件中的Person类的元数据被虚拟机加载后放在了方法区。类加载的最终产物,一个对象实例new Person(),则是被放在了堆中。而person则是new Person()这个对象实例的引用,其位于虚拟机栈中的局部变量表(或称为本地变量原创 2020-10-13 21:49:28 · 240 阅读 · 0 评论 -
【JVM第四篇--运行时数据区】堆
一、堆的概述 JVM的运行时数据区如下: 一个Java程序运行起来对应着一个进程(操作系统的进程),一个进程对应着一个JVM实例。而一个JVM实例就对应着一个运行时数据区,则其中就包含着一个堆空间。一个进程中的多个线程共享这个堆空间。 几乎所有的对象实例和数组都在堆上分配内存(并非所有的对象都是在堆上分配内存,后面会提到这一特殊情况),即堆空间存储着绝大部分的对象。虚拟机栈中的栈帧保存着数组或者对象的引用,这个引用就指向对象或者数组在堆中的位置。 有代码如下: package com.fengjian.w原创 2020-09-28 16:17:30 · 414 阅读 · 0 评论 -
【JVM第三篇--运行时数据区】程序计数器、虚拟机栈、本地方法栈
一、运行时数据区 我们在编写Java程序时,使用JVM的流程主要如下所示: 虚拟机在执行Java程序时,会把它所管理的内存划分为不同的数据区域,即运行时数据区。有些数据区域是线程共享的,即这些区域会随着虚拟机的启动而创建,随着虚拟机的关闭而销毁。而另一些区域则是与线程对应,属于线程私有的。这些区域会随着线程开始而创建,随着线程的结束而销毁。 具体的划分如下: 多个线程共享的:堆、方法区 每个线程私有的:程序计数器、Java虚拟机栈、本地方法栈 图示如下: 关于Java线程:在虚拟机中,每个线程都与操作系原创 2020-09-16 23:02:51 · 276 阅读 · 0 评论 -
【JVM第二篇--类加载机制】类加载器与双亲委派模型
一、什么是类加载器 在类加载过程中,加载阶段有一个动作是“通过一个类的全限定名称获取定义此类的二进制字节流”,虚拟机将这个动作交给应用程序,让其自行去决定怎么获取所需的类。而实现这个动作的代码就被称为类加载器。关于类加载过程,可以看我的上一篇博客《类加载过程》。 1、类与加载器 类加载器除了用于实现类的加载外,还用于确定一个类在虚拟机中的唯一性,也就是说类加载器还用于判断两个类是否相等。 想要判断两个类对象是同一个类,需要两个必要条件: ① 类的完整类名包括包名都必须一致 ② 加载这个类的类加载器必须是同原创 2020-09-12 16:00:23 · 248 阅读 · 0 评论 -
【JVM第一篇--类加载机制】类加载过程
一、什么是类加载过程 我们编写的类(.java文件)会被编译器(如javac编译器)编译成Class文件。Java虚拟机把Class文件加载到内存中的过程就称为类加载过程。 一个类从被加载到虚拟机内存中,到卸载出内存,共经历七个过程,即这个类的生命周期会经历加载、验证、准备、解析、初始化、使用、卸载七个阶段。其中,验证、准备、解析三个阶段又统称为连接。图示如下: 下面我们将逐个介绍类生命周期每个阶段的执行过程。 二、类加载时机 在生命周期图中,加载、验证、准备、初始化、卸载。这五个阶段的顺序是确定的原创 2020-08-28 14:16:35 · 428 阅读 · 0 评论