JVM笔记
文章平均质量分 87
谢宇寒
这个作者很懒,什么都没留下…
展开
-
图解JVM(五)——运行时数据区总结
Q1 : JVM内存模型,有哪些区,分别的作用?类加载子系统将class文件加载到运行时数据区class文件内容会按照规范加载到运行时数据区的不同区域执行引擎通过运行时数据区进行指令执行运行时数据区分类:虚拟机栈:堆内存:方法区:Q2: Java 8的内存分代改进?Q3 : 类加载流程Q4: 对象什么时候进入老年代?Q5: Eden和Survivor的比例分配,为什么有两个survivor区?默认情况下Eden space : Survivor 0 space :原创 2021-02-19 10:52:09 · 111 阅读 · 0 评论 -
图解JVM(四)——方法区
方法区,堆,虚拟机栈的合作关系为了解析方法区,堆,虚拟机栈的合作关系,我写了一个非常简单的测试代码,如下 public static void main(String[] args) { Person person = new Person(); } public class Person { }Person person = new Person();这一语句可以分为3个部分来解释,Person,person,new Person()。P原创 2021-02-19 09:38:38 · 266 阅读 · 1 评论 -
图解JVM(三)——堆
概述堆是JVM存放对象和数组的区域,线程共享。其逻辑划分如图。堆是JVM内存管理最大的一块区域,也是GC的重点区域。查看堆内存的两种方式1. JVisualVM此软件就在jdk的bin目录下,记得先去安装Visual GC的插件(网上有教程,不赘述)。打开后就如下图,可以看到本地的一些Java进程。2. jps + jstatjps + jstat是Java的两个命令,可以直接在命令行中执行。jps:查看当前Java进程jstat -gc 端口号:查看当前进程堆内存情况原创 2021-02-05 16:56:53 · 697 阅读 · 2 评论 -
图解JVM(二)——线程私有区
Runtime类:用于应用程序获取当前java虚拟机运行时环境的。每个JVM只有一个Runtime实例JVM允许一个应用多线程,每个线程与操作系统的本地线程直接映射。操作系统负责线程调度到CPU,本地线程初始化成功,就会调用Java线程的run方法。JVM的系统线程:虚拟机线程:周期任务线程GC线程编译线程:将字节码编译成本地代码信号调度线程程序计数器(Program Counter Register)对物理PC寄存器的抽象模拟。存储指向下一条指令的地址。由执行引擎读取下一条指令。空间很.原创 2021-01-29 14:26:14 · 2451 阅读 · 1 评论 -
图解JVM(一)—— 概述&类加载子系统
简介jvm是一个应用程序,其作用是运行jvm字节码,为什么叫jvm字节码呢?因为jvm支持运行各种语言编译成的字节码,而不仅仅是java,当然java字节码是最广泛的。其功能主要分为两点:write once,run anywhere:在不同的硬件平台都有对应的jvm程序,字节码可以运行在任意平台的jvm中。提供内存管理和垃圾回收等功能JVM支持的指令流是基于栈的指令集架构,下面是将该方法所在类编译成的class文件,通过javap进行反编译后的代码,可以看到基本指令就是iconst,istor原创 2021-01-06 13:53:52 · 296 阅读 · 0 评论