JVM学习

进程和线程

进程是操作系统分配资源的最小单位
线程是操作系统调度的最小单位

JVM JRE JDK

java虚拟机
识别class文件,解析它的指令,最终调用操作系统上的函数,完成我们想要的操作。
JRE是java运行环境,JVM标准加上一大推基础类库。
JDK包含JRE,还提供了一些非常好用的工具。

JVM可以运行多种语言

JVM只识别字节码,只要语言服了字节码的规范,像scala

JVM有哪些内存区域

虚拟机栈:在JVM运行过程中存储当前线程运行方法所需的数据,指令,返回地址。
本地方法栈: 他服务的对象是native方法,也就是C,或者C++写的。
程序计数器: 主要用来记录各个线程执行的字节码的地址。
方法区:存放类的信息,常量池,方法数据,方法代码。
堆:堆是JVM上最大的内存区域,我们申请的几乎所有对象,都在堆中存储。
在这里插入图片描述

堆空间大小怎么配置?各区域如何区分在这里插入图片描述

新生代:eden survivor 老年代 持久代

JVM 中有哪些会OOM

堆溢出: OutOfMemoryError
栈溢出:虚拟机栈,启动一个线程就会有,存储运行时数据指令和返回地址 (一般是递归用的不恰当)
方法区溢出: cglib
本地直接内存溢出

JVM在创建对象时采用了哪些并发安全机制

CAS 加失败重试。
1 本地线程分配缓冲,就是多线程把空间拆分开,这样他俩就弄不到一块了。
2 采用锁

什么是对象头?

在这里插入图片描述

怎么判断对象的存活

1 引用计数法
2 可达性分析计算
GCroots 就是看看 静态变量 线程栈变量 常量池 JNI(指针) 中有没有那些类,有的话就存活,没有就dead

什么是标记清除算法

GCroot根可达,没标记的话,就是垃圾,适合清除老年代。

标记整理算法

就是清除之后再整理一下,再清楚。

扩容新生代为何能提高GC的效率

CMS垃圾回收器

1 针对老年代
2 采用算法 标记清除法,采用concurrent(并发的) Mark Sweep

守护线程和用户线程的区别?

java中的线程分为两种: 守护线程和用户线程
守护线程通过调用Thread.setDaemon(true)设置。
一般程序使用的都是用户线程
守护线程一般不用,垃圾回收线程就是守护线程

使用守护线程的注意点

1 Thread.setDaemon()必须在Thread.start(true)之前调用
2 守护线程(daemon)是为了其他线程提供服务,如果全部的User Thread已经结束,守护线程没有可服务的线程,JVM关闭。

死锁

就是两个线程 都 需要对方的资源

Excutor和Excutors的区别

前者顶层接口 后者一个工具类

什么是阻塞队列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值