Java虚拟机几个点
来源:互联网 发布:双十二淘宝有活动吗 编辑:程序博客网 时间:2024/05/17 23:09
1. 内存模型以及分区,需要详细到每个区放什么。
程序计数器:当前线程所执行的字节码的行号指示器。
Java虚拟机栈:描述Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。
本地方法栈:为虚拟机使用到的Native方法服务。
堆:存放对象实例。
方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
2. 堆里面的分区:Eden,survival from、survivalto,老年代,各自的特点
Eden区的对象都是朝生夕死,发生minor gc的时候会清除eden区和survival区的,把存活的对象移到另一个Survival区,该survial区由老年代保证。当在年轻代中对象经过多次minor gc以后还存活,达到老年代的年纪,就会移动到老年代,还有就是大对象在年轻代无法存储,直接转到老年代,还有可能因为担保而进入老年代的
3. 对象创建方法,对象的内存分配,对象的访问定位
1对象的创建包括三步骤:①当遇到new命令的时候,会在常量池中检查该对象的符号引用是否存在,不存在则进行类的加载,否则执行下一步②分配内存,将将要分配的内存都清零。③虚拟机进行必要的设置,如设置hashcode,gc的分代年龄等,此时会执行<init>命令在执行之前所有的字段都为0,执行<init>指令以后,安装程序的意愿进行初始化字段。
2:对象的内存分配:包括对象头,实例数据,对齐填充
①对象头:包括对象的hascode,gc分代年龄,锁状态标等。
②实例数据:也就是初始化以后的对象的字段的内容,包括父类中的字段等
③对齐填充:对象的地址是8字节,虚拟机要求对象的大小是对象的整数倍(1倍或者两倍)。因此就会有空白区。
3:对象的访问:hotspan中 是采用对象直接指向对象地址的方式(这样的方式访问比较快)(还有一种方式就是句柄,也就是建一张表维护各个指向各个地址的指针,然后给指针设置一个句柄 (别名),然后引用直接指向这个别名,就可以获得该对象,这种的优势就是,实例对象地址改变了,只要修改句柄池中的指针就可以了,而不用引用本身不会发生 改变)。
4.GC的两种判定方法:引用计数(引用计数算法)与引用链(可达性分析算法)
引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。优点:实现简单,判定效率也很高。缺点:最主要的原因是它很难解决对象之间相互循环引用的问题。
可达性分析算法:基本思路就是通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连(用图论的话来说,就是从GC Roots到这个对象不可达)时,则证明此对象是不可用的。 如图3-1所示,对象object 5、object 6、 object 7虽然互相有关联,但是它们到GC Roots是不可达的,所以它们将会被判定为是可回收的对象。
5.GC的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用在什么地方,如果让你优化收集方法,有什么思路?
①标记清除——算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。缺点:效率不大;空间问题,标记清除后产生大量不连续的内存碎片。
②复制算法——将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。 当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。
③标记整理——标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。
6. GC收集器有哪些?CMS收集器与G1收集器的特点
①Serial收集器——单线程的收集器
②ParNew收集器——Serial收集器的多线程版本
③Parallel Scavenge收集器——Parallel Scavenge收集器的目标则是达到一个可控制的吞吐量(Throughput)。
④Serial Old收集器 ——Serial收集器的老年代版本,它同样是一个单线程收集器,使用“标记-整理”算法。给Client模式下的虚拟机使用
⑤Parallel Old收集器——Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法。
⑥CMS收集器——以获取最短回收停顿时间为目标的收集器。
⑦G1收集器——与CMS的“标记—清理”算法不同,G1从整体来看是基于“标记—整理”算法实现的收集器;可预测的停顿:这是G1相对于CMS的另一大优势
(后面五个问题我会在看到后继续补充)
7. Minor GC与Full GC分别在什么时候发生?
8. 几种常用的内存调试工具:jmap、jstack、jconsole
9. 类加载的五个过程:加载、验证、准备、解析、初始化
10. 双亲委派模型:Bootstrap ClassLoader、Extension ClassLoader、ApplicationClassLoader。
11. 分派:静态分派与动态分派。
- Java虚拟机几个点
- java虚拟机几个参数
- java几个新知识点
- JAVA基础 几个注意点
- JAVA虚拟机几个命令行参数说明
- JAVA虚拟机几个命令行参数说明
- Java虚拟机几个命令行参数说明
- 介绍几个java虚拟机性能监测工具
- Java虚拟机几个命令行参数说明
- 介绍几个java虚拟机性能监测工具
- java虚拟机把内存分为几个区域
- java虚拟机的几个重要工作区域
- java虚拟机垃圾回收的几个特点
- java值传递几个注意点
- java中的几个循环的注意点
- Java开发的几个注意点
- Java开发的几个注意点
- java常见的几个易混淆点
- POJ 3117 World Cup G++
- 用virtualenv建立多个Python独立开发环境
- Java(二)-数组
- 500. Keyboard Row
- UVA 679 Dropping Balls 【二叉树】
- Java虚拟机几个点
- 幸运的袋子
- caffe安装教程(2)/caffe安装与编译
- web布局学习---标准文档流、脱标以及页面设计
- python爬虫入门笔记
- 直播+时尚跨界掀起新玩法,传统时装行业变革在即
- 2 Open/Close函数及touch命令的实现
- Collection与Collections的区别
- leetcode经典编程题(1)