JVM探究
- 请你谈谈你对JVM的理解?java->class->jvm
- java8虚拟机和之前的变化更新?
- 什么是OOM,什么是栈溢出StackOverFlowError?怎么分析?
- JVM的常用调优参数有哪些?
- 内存快照如何抓取,怎么分析Dump文件?知道吗?
- 谈谈JVM中,类加载器你的认识?
JVM的位置
JVM的体系结构
注意:1.8后内存模型是有变化的–一定要看
最新内存模型
类加载器
作用:加载Class文件-
1.虚拟机自带的加载器
2.启动类(根)加载器
3.扩展类加载器
4.应用程序加载器
双亲委派机制(百度看吧)
沙箱安全机制
Native
public class Demo {
public static void main(String[] args) {
new Thread(()->{
System.out.println("d");
},"threadName").start();
}
//native:凡是带了native关键字的,说明java的作用范围达不到了,回去调用底层c语言的库!
//会进入本地方法栈
//调用本地方法接口 JNI
//JNI作用:扩展Java的使用,融合不同的编程语言为Java所用:最初:c、c++
//Java诞生的时候C、C++横行,想要立足,必须要有调用C、C++的程序
//它在内存区域中专门开辟了一块标记区域:Native Method Stack,登记native方法
//在最终执行的时候,加载本地方法库中的方法通过JNI
//Java程序驱动打印机,管理系统,掌握即可,在企业级应用中较为少见
private native void start0();
//调用其他接口:Socket..WebService...http
}
PC寄存器
方法区
栈:数据结构
三种JVM
堆
新生区
老年区
永久区
元空间:逻辑上存在,物理上不存在
各个区分配比例是多少:
堆内存调优
GC:垃圾回收
JVM在进行GC时,并不是对着三个区域统一回收,大部分时候,回收都是新生代
- 新生代
- 幸存区(from,to)
- 老年区
GC两种类:轻GC(普通的GC),重GC(全局GC)
题目:
- JVM的内存模型和分区-详细到每个分区放什么?
- 堆里面的区有哪些?Eden,from,to,老年区,说说他们的特点!
- GC的算法有哪些?标记清除法,标记压缩,赋值算法,引用计数法,怎么用的?
- 轻GC和重GC分别在什么时候发生?
常用算法
复制算法:
- 好处:没有内存的碎片
- 坏处:浪费了内存空间:多了一半空间永远是空to,假设对象100%存活(极端情况)
标记删除算法:
- 优点:不需要额外的空间!
- 缺点:两次扫描,严重浪费时间,会产生内存碎片
标记压缩
标记清除压缩
先标记清除几次
再压缩
总结
JMM:Java Memory Model
- 百度
- 思维导图
单点登录-|sso
版权声明:本文为weixin_42287451原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。