秋招之路7:全面JVM

jvm全景图

其中蓝色区域是线程独有的,黄色区域是线程共享的

分析方法

javap 命令 javap -c 可以对代码进行反汇编

里面的各种指令,可以用jvm指令手册一个一个查

一个线程的全景图


程序计数器:和计组一样,是存放下一条指令所在单元的地址的地方。

栈帧:一个方法对应一块栈帧内存区域。放自己方法里面各种变量用的。
其中局部变量表一般是放局部变量。操作数栈,一般是放操作过程中的常量。
局部变量表中的对象,存的是对象的地址,对象数据存在堆空间中。
动态链接:将符号引用转换为直接引用。

本地方法栈:一般是本地的native方法。

堆内存回收图

流程:
当Eden区满了后,GC收集Eden区,没有被收集的对象,分代年龄+1,进入From区;
下一次Eden区满后,GC收集Eden区和From区,没有被收集的对象,分代年龄+1,进入To区;
下一次Eden区满后,GC收集Eden区和To区,没有被收集的对象,分代年龄+1,进入From区;
...
直到有分代年龄为15的对象,进入到老年代。
当老年代满了后,开始Full GC[比较耗时].

分析内存情况的工具

jvisualvm:jdk自带的一个工具,然后可以安一个visual GC的插件。

名词

GC:垃圾收集器
Minor GC:新生代GC,指发生在新生代的垃圾收集动作,所有的Minor GC都会触发全世界的暂停(stop-the-world),停止应用程序的线程,不过这个过程非常短暂。
Major GC/Full GC:老年代GC,对整个堆进行垃圾收集

可达性分析算法

算法的基本思想:通过一系列的称之为“GC ROOTs”的对象作为起点,从这些起点开始向下搜索。
找到的对象都标记为非垃圾对象;其余对象标记为垃圾对象。
GC ROOTs根节点:线程栈的本地变量,静态变量,本地方法栈的变量等等。

jvm调优

主要调优在堆上,也有部分调优在方法区
目的:减少full GC的次数,减少每次full GC的执行时间。
需要

各种场景分析,具体垃圾收集器,垃圾收集算法进行分析。

一种分析方法:GC日志

原文地址:https://www.cnblogs.com/whyaza/p/12333594.html

时间: 2024-11-06 09:47:53

秋招之路7:全面JVM的相关文章

秋招之路9:juc并发

j.u.c是java.util.concurrent的简称 通过查api,了解到是由以下这三个组成的. juc包图 锁的两种实现方式 java并发编程,关于锁的实现方式有两种: 1.基于synchronized关键字实现同步,jvm内置锁,也叫隐式锁,由jvm自动加锁和解锁 2.juc下的lock接口实现的更加灵活的锁的实现方式,也叫显示锁,需要手动加锁和解锁 重要分类 locks部分:显示锁(互斥锁和读写锁)相关: atomic部分:原子变量类相关,是构建非阻塞队列算法的基础,使用CAS实现:

秋招之路2: implements 与 extends ,抽象类总结

extends[继承类]的特点 子类拥有父类的非private属性,方法. 子类可以拥有自己的属性和方法,子类可以对父类进行扩展. 子类可以用自己的方式实现父类的方法. 减少了代码的冗余,即相同重复的代码可以放在父类里面,各自子类有不同的实现. 相关关键字 super:引用父类成员变量.局部变量.方法. this:引用本类成员变量,方法. 需要注意的是:类的成员变量与局部变量重名,类的成员变量将被隐藏,如果要使用类的成员变量,需要使用this引用之. implements[实现接口]的特点 1.

秋招之路1:ArrayList的底层实现原理

ArrayList 概述 ArrayList 是基于数组实现的,是一个动态数组 ArrayList 不是线程安全的,只能在单线程环境下:多线程使用ArrayList,应该考虑Collections.synchronizedList(List l)和concurrent并发包下的CopyOnWriteArrayList类 ArrayList实现了Serializable接口,因此它支持序列化,能够通过序列化传输: 实现了RandomAccess接口,支持快速随机访问,实际上就是通过下标序号进行快速

秋招之路8:JAVA锁体系和AQS抽象队列同步器

整个的体系图 悲观锁,乐观锁 是一个广义概念:体现的是看待线程同步的不同角度. 悲观锁 认为在自己使用数据的时候一定有别的线程来修改数据,在获取数据的时候会先加锁,确保数据不被别的线程修改. 实现:关键字synchronized,接口Lock的实现类 适用场景:写操作多,先加锁可以保证写操作时的数据正确. 乐观锁 认为自己在使用数据的时候不会有别的线程修改数据,所以不会添加锁,只是在更新数据的时候去判断之前有没有别的线程更新了这个数据. 实现:CAS算法,例如AtomicInteger类的原子自

[转载]从春招到秋招,一个本科生的求职之路。

原文:从春招到秋招,一个本科生的求职之路. 自报家门,北理工软件学院本科生. 主要部分: 1.毕业去向选择 2.春招过程 3.暑期实习 4.秋招辛酸路程 5.一点感悟 1.毕业去向选择问题 从大一开始,就决定毕业找工作,方向是有了,但是三年多过去了,到现在才发现,大学期间并没有为这个方向做出太大的努力,这也成为我一个本科生找工作的很大障碍,实践能力严重不足.我的情况是:我决定工作,但是由于高中的思维,太看重学习成绩,成绩搞的很好,虽然有保研资格,但是又不读研,找工作的时候,好的互联网公司不看成绩

错过了春招的你,难道还不为秋招做准备吗

序 如今的校招,像一场突围赛,很多人"牺牲"在前进的路上,那些突围成功的人,不是因为他们刀枪不入,而是他们有扎实的准备,周密的计划以及可圈可点的技巧. 获得校招的成功,大致需要经历计划.准备.应聘这三个过程,文中全面覆盖这些内容. 无论你是刚刚进入大学的萌新,还是身处在大二.大三的任何阶段,这篇文章都尽可能给出一些建议和指导. 目录 简单的自我介绍 [计划]时间安排:对找工作的同学十分重要的时间点,以及如何安排自己的行程 [准备]技能清单:需要具备的能力 [准备]如何提高:如何有针对性

错过了春招,难道你还不为秋招做准备吗

序 如今的校招,像一场突围赛,很多人"牺牲"在前进的路上,那些突围成功的人,不是因为他们刀枪不入,而是他们有扎实的准备,周密的计划以及可圈可点的技巧. 获得校招的成功,大致需要经历计划.准备.应聘这三个过程,文中全面覆盖这些内容. 无论你是刚刚进入大学的萌新,还是身处在大二.大三的任何阶段,这篇文章都尽可能给出一些建议和指导. 目录 简单的自我介绍 [计划]时间安排:对找工作的同学十分重要的时间点,以及如何安排自己的行程 [准备]技能清单:需要具备的能力 [准备]如何提高:如何有针对性

网易2017秋招编程题集合-牛客网

网易2017秋招编程题集合-牛客网 链接:https://www.nowcoder.com/questionTerminal/0147cbd790724bc9ae0b779aaf7c5b50来源:牛客网 如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列.例如: {1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列, {1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列. 现在给出一个数字序列,允许使用一

2017年秋招美团Java程序员开发,看我如何拿到offer

热乎的面经,昨天面的美团,虽然面完了HR面,但是感觉希望不大,希望能走运拿到offer吧.三面技术面面经如下: 一面: 中间省略掉大概几个问题,因为我不记得了,下面记得的基本都是我没怎么答好的... 1.了解SOA,微服务吗? 2.分布式系统如何负载均衡?如何确定访问的资源在哪个服务器上? 一.轮询.二.随机.三.最小响应时间.四. 最小并发数.五.哈希. 3.设计一个分布式负载均衡缓冲系统,如何快速定位到是那个服务器(使用key分段.一致性hash) 4.如何保证缓冲区和数据库之间的强一致性(