虚拟机内存结构简图 PC寄存器作用 PC寄存器用来存储指向下一条指令的地址,也即将要执行的指令代码,由执行引擎读取下一条指令。 简介 它是一块很小的内存空间,几乎可以忽略不计。也是运行速度最快的存储区域。 在JVM规范中,每个线程都有它自己的程序计数器,是线程私有的,声明周期与线程的声明周期保持一致 ...
分类:
其他好文 时间:
2020-09-07 18:47:45
阅读次数:
48
多线程相关 1. 进程与线程 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建、运行到消亡的过程。 线程是比进程更小的执行单位,一个进程在其执行的过程中可以产生多个线程。线程共享进程的堆和方法区的资源,同时线程还有私有的程序计数器、虚拟机栈和本 ...
分类:
编程语言 时间:
2020-08-19 19:26:10
阅读次数:
60
类加载子系统类加载器子系统作用类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是否可以运行,则由ExecutionEngine决定。类加载过程:加载->验证->准备->解析->初始化加载:通过一个类的全限定名获取定义此类的二进制字节流将这个字节流所代表的静态存储结构转
分类:
其他好文 时间:
2020-07-26 11:21:14
阅读次数:
95
1、运行时数据区域 1.1、程序计数器 一块较小的内存,它可以看作是当前线程所执行的字节码的行号指示器。 线程独有 唯一一个没有规定OutOfMemoryError情况的区域 1.2、Java虚拟机栈 线程私有,生命周期与线程相同 每个方法被执行的时候都会创建一个栈帧,方法的开始到结束对应了栈帧的入 ...
分类:
其他好文 时间:
2020-07-22 02:07:10
阅读次数:
65
判断对象是否存活 引用计数 假如对象被引用,则计数加1,计数为0时回收。但是存在循环引用问题:A引用B,B引用A,导致AB永远不能被回收。 可达性分析(JAVA采用的算法) 从GC Root出发看某个对象是否可达。假如不可达,则回收。 GC Root:存活时间很长的对象,有存在意义的对象。 虚拟机栈 ...
分类:
其他好文 时间:
2020-07-21 11:37:02
阅读次数:
74
虚拟机栈 虚拟机栈概述 由于跨平台性的设计,Java 的指令都是根据栈来设计的。不同平台 CPU 架构不同,所以不能设计为基于寄存器的。 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。 有不少 Java 开发人员一提到 Java 内存结构,就会非常粗粒度地将 ...
分类:
其他好文 时间:
2020-07-20 13:15:56
阅读次数:
55
自动内存管理 运行时数据区 运行时数据区主要包括虚拟机栈、本地方法栈、程序计数器、方法区、堆等,其中方法区和堆属于线程共享内存区域;虚拟机栈和本地方法栈属于线程隔离的数据区 程序计数器 占用内存空间较小,可以当作是当前线程执行的字节码行号指示器。jvm的多线程是通过线程切换并分配一定处理时间的方式来 ...
分类:
其他好文 时间:
2020-07-18 22:42:43
阅读次数:
74
版权声明:源出处:尚硅谷JVM 博客来源于大佬整理 本地方法栈 1.Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法(一般非Java实现的方法)的调用 2.本地方法栈,也是线程私有的。 3.允许被实现成固定或者是可动态拓展的内存大小。(和Java虚拟机栈在内存溢出方面情况是相 ...
分类:
其他好文 时间:
2020-07-17 14:11:21
阅读次数:
79
一个进程对应一个jvm实例,一个运行时数据区,又包含多个线程,这些线程共享了方法区和堆,每个线程包含了程序计数器、本地方法栈和虚拟机栈。 核心概述 1.一个jvm实例只存在一个堆内存,堆也是java内存管理的核心区域 2.Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最 ...
分类:
其他好文 时间:
2020-07-15 12:57:51
阅读次数:
71
JVM垃圾回收的算法很多,但是不管是哪种算法,在进行GC时大致的流程都是差不多的,主要有以下3个过程: ###1. 枚举根节点 这个过程主要是找到所有的GC Roots对象,这些对象一般发生在JVM虚拟机栈栈帧、常量池中的静态对象、方法区中静态类属性引用、本地方法栈中引用的对象。这个过程会发生STW ...
分类:
其他好文 时间:
2020-07-12 13:56:39
阅读次数:
63