JVM相关

在这里插入图片描述
JVM运行时的数据区主要包括:PC程序计数器、本地方法栈、虚拟机栈、方法区、堆
PC:程序计数器,主要用来记录当前线程正在执行的字节码的位置,属于线程私有。
**虚拟机栈:**是描述java执行方法的内存模型,每个方法被执行的时候,都会创建一个栈帧,把栈帧压入栈,当方法正常返回或者抛出未捕获的异常时,栈帧就会出栈。栈帧用来存储方法的相关信息,包括局部变量数表、返回值、操作数栈、动态连接等。线程私有
本地方法栈: 和虚拟机栈类似,区别是虚拟机栈为执行 Java 方法服务, 而本地方法栈则为
Native 方法服务。
**方法区:**即我们常说的永久代(Permanent Generation)。用来存储被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据。运行时常量池(Runtime Constant Pool)是方法区的一部分:存放编译期生成的各种字面量和符号引用;Class文件中除了存有类的版本、字段、方法、接口等描述信息,还有一项是常量池,存有这个类的 编译期生成的各种字面量和符号引用,这部分内容将在类加载后,存放到方法区的运行时常量池中。
:被线程共享的一块内存区,创建的对象、数组都保存在java堆内存中,也是垃圾收集器进行垃圾收集的最重要的内存区域。java堆从垃圾回收的角度还可以细分新生代(Eden区、From Survivor、To Survivor(8:1:1))和老年代(1:2)
常见的垃圾回收算法:
1、Mark-Sweep(标记-清除算法):
分为两个阶段,标记阶段和清除阶段,标记阶段任务时标记出所有需要回收的对象,清除阶段就是清除被标记队形的空间。实现简单,容易产生内存碎片。
在这里插入图片描述
2、Cpoying(复制清除算法)
将内存划分为两个大小相等的区域,每次使用其中的一块,当进行垃圾回收的时候,把其中存活对象全部复制到另外一块,然后把已使用的内存空间一次性清空掉。不容易出现内存碎片,但是可能内存空间少,当存活对象多的时候,效率低下。
在这里插入图片描述
3、Mark-Compact(标记-整理算法)
先标记存活的对象,然后把存活对象向一边移动,然后清理掉端边界以外的内存。不易产生内存碎片,内存利用率高,存活对象多并且分散的时候,移动次数多,效率低下。
在这里插入图片描述
4、分代回收法
因为新生代每次垃圾回收都要回收大部分对象,所以新生代采用Copying算法。新生代里面分成一份较大的Eden空间和两份较小的Survivor空间。每次只使用Eden和其中一块Survivor空间,然后垃圾回收的时候,把存活对象放到未使用的Survivor(划分出from、to)空间中,清空Eden和刚才使用过的Survivor空间。
由于老年代每次只回收少量的对象,因此采用mark-compact算法。
在堆区外有一个永久代。对永久代的回收主要是无效的类和常量
四种引用
强引用:当一个对象被强引用变量引用时,它处于可达状态,它是不可能被垃圾回收机制回收的,即使该对象以后永远都不会被用到 JVM 也不会回收。因此强引用是造成 Java 内存泄漏的主要原因之一。
软引用:对于只有软引用的对象来说,当系统内存足够时它不会被回收,当系统内存空间不足时它会被回收。软引用通常用在对内存敏感的程序中。
弱引用:对于只有弱引用的对象来说,只要垃圾回收机制一运行,不管 JVM 的内存空间是否足够,总会回收该对象占用的内存。
虚引用:虚引用的主要作用是跟踪对象被垃圾回收的状态。
JMM
Java 内存模型
java的并发采用“共享内存”模型,线程之间通过读写内存的公共状态进行通讯,多个线程之间不能通过直接传递函数交互的,他们之间的交互只能通过共享变量实现。其主要目的是定义程序中各个变量的访问规则。
java内存模型规定所有变量都存储在主内存中,每个线程还有自己的工作内存。线程中工作内存中保存了被该线程使用的变量的拷贝(从主存中国拷贝过来),线程对变量的所有操作都必须在工作内存中执行,不能直接访问主存中的变量。不同线程之间无法直接访问对方工作内存的变量,线程间变量值的传递通过主存来完成。主内存只要对应java堆中的实例数据部分,工作内存主要对应与虚拟机栈中部分区域。
相关面试题参考:https://blog.csdn.net/qq_41701956/article/details/100074023

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值