剑指Offer——知识点储备-故障检测、性能调优与Java类加载机制

故障检测、性能调优

用什么工具可以查出内存泄露

  • (1)MerroyAnalyzer:一个功能丰富的java堆转储文件分析工具,可以帮助你发现内存漏洞和减少内存消耗;
  • (2)EclipseMAT:是一款开源的java内存分析软件,查找内存泄漏,能容易找到大块内存并验证谁在一直占用它,它是基于Eclipse RCP,可以下载RCP的独立版本或者Eclipse的插件;
  • (3)JProbe:分析java的内存泄漏;

类加载机制

JVM加载类的过程,双亲委派模型中有哪些方法?有没有可能父类加载器和子类加载器加载同一个类?如果加载同一个类,该使用那哪一个类?

JVM如何加载一个类的过程

1.加载:查找和导入class文件;

2.连接:

- (1)检查:检查载入的class文件数据正确性;

- (2)准备:为类的静态变量分配存储空间;

- (3)解析:将符号引用转换成直接引用(可选)

3.初始化:初始化静态变量,静态代码块。

4.使用

5.卸载

双亲委派图



  双亲委派概念:

  如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委托给父类加载器去完成,每一层次的加载器都是如此。因此所有的类加载请求都会传给顶层的启动类加载器,只有当父加载器反馈自己无法完成该加载请求(该加载器的搜索范围中没有找到对应的类)时,子加载器才会尝试自己去加载

  加载器

  • (1)启动类加载器:是用本地代码实现的类装入器,它负责将/lib下面的类库加载加载到内存中{比如:rt.jar}.由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作.
  • (2)扩展类加载器
  • (3)应用程序类加载器

双亲委派模型中有哪些方法有没有可能父类加载器和子类加载器加载同一个类?

   不可能父类和子类同时加载一个类。一个类的加载先由它的父类进行加载,若父类(递归向上)加载不了,则由子类加载。

  加载的过程:见jvm232页。

  • (1)通过findLoadedClass(),查看请求的类是否被加载过;
  • (2)若没有加载,则调用父类加载器的loadClass()方法进行加载;
  • (3)若父类加载器加载为空则用启动类加载器作为父类加载器;
  • (4)如果父类加载失败,则抛出异常;
  • (5)然后再调用自己的findClass()方法进行加载;
  • (6)最后判断该类是否进行解析resolveClass();

其中用到的方法有:

1、loadClass()

2、findLoadedClass()

3、findbootstrapClassOrNull()

4、findClass()

5、resolveClass()

Student s=new Student();在内存中做了哪些事情

  • (1)加载Student class文件进内存;
  • (2)在栈内存为s开辟空间;
  • (3)在堆内存为学生对象开辟空间;
  • (4)对学生对象的成员变量进行默认初始化;
  • (5)对学生对象的成员变量进行显示初始化;
  • (6)通过构造方法对学生的成员变量赋值;
  • (7)学生对象初始化完毕,把对象地址赋值给s变量;




剑指Offer——知识点储备-故障检测、性能调优与Java类加载机制的更多相关文章

  1. 故障检测、性能调优与Java类加载机制

    故障检测.性能调优与Java类加载机制 故障检测.性能调优 用什么工具可以查出内存泄露 (1)MerroyAnalyzer:一个功能丰富的java堆转储文件分析工具,可以帮助你发现内存漏洞和减少内存消 ...

  2. 剑指Offer——知识点储备-J2EE基础

    剑指Offer--知识点储备-J2EE基础 9.2 jdk 1.8的新特性(核心是Lambda 表达式) 参考链接:http://www.bubuko.com/infodetail-690646.ht ...

  3. 剑指Offer——知识点储备-操作系统基础

    剑指Offer--知识点储备-操作系统基础 操作系统 操作系统什么情况下会出现死锁? 产生死锁的必要条件 (1)互斥条件:即某个资源在一段时间内只能由一个进程占有,不能同时被两个或两个以上的进程占有, ...

  4. 剑指Offer——知识点储备-数据库基础

    剑指Offer--知识点储备-数据库基础 数据库 事务 事务的四个特性(ACID):   原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Dura ...

  5. 剑指Offer——知识点储备-JVM基础

    剑指Offer--知识点储备-JVM基础 1.java内存与内存溢出 1.1 JVM分为哪些区,每一个区干嘛的?(见java虚拟机38页) (1)程序计数器(线程私有) 当前线程执行字节码的信号指示器 ...

  6. 剑指Offer——知识点储备-Java基础

    剑指Offer--知识点储备-Java基础 网址来源: http://www.nowcoder.com/discuss/5949?type=0&order=0&pos=4&pa ...

  7. 剑指Offer——知识点储备--Linux基本命令+Makefile

    剑指Offer--知识点储备–Linux基本命令 1.linux下查看进程占用cpu的情况(top): 格式 top [-] [d delay] [q] [c] [S] [s] [i] [n] 主要参 ...

  8. 剑指Offer——知识点储备-常用算法

    剑指Offer--知识点储备-常用算法 快速排序 注:若排序是有序的,采用快排,则退化为冒泡排序. 解决这个问题,采用两个选取基准的方法 (1)随机选取基数(在这个区间内随机取一个数) 出现的恶劣情况 ...

  9. 剑指Offer——知识点储备-设计模式

    剑指Offer--知识点储备-设计模式 设计模式 设计模式的六大原则 (1)单一职责原则(有且仅有一个原因引起类的变化): (2)里氏替换(任何父类出现的地方子类都可以替换): (3)依赖倒置(依赖抽 ...

随机推荐

  1. .NET Core2.0+MVC 用session,cookie实现的sso单点登录

    博主刚接触.NET Core2.0,想做一个单点登录的demo,所以参考了一些资料,这里给上链接: 1.http://www.cnblogs.com/baibaomen/p/sso-sequence- ...

  2. [LeetCode] Path Sum IV 二叉树的路径和之四

    If the depth of a tree is smaller than 5, then this tree can be represented by a list of three-digit ...

  3. AXIOS源代码重点难点分析

    摘要 vue使用axios进行http通讯,类似jquery/ajax的作用,类似angular http的作用,axios功能强大,使用方便,是一个优秀的http软件,本文旨在分享axios源代码重 ...

  4. pyqt5 动画学习(三) 指定控件的移动轨迹

    这一篇来讲解自定义控件的移动轨迹 原理:我们采用QPainterPath先画一个弧线,然后加载一个物体让物体移动,设置100个关键帧,每个关键帧物体的坐标位置就是弧线的坐标位置,这样就能达到按照指定轨 ...

  5. NOIP2014-5-10模拟赛

    Problem 1 机器人(robot.cpp/c/pas) [题目描述] 早苗入手了最新的Gundam模型.最新款自然有着与以往不同的功能,那就是它能够自动行走,厉害吧. 早苗的新模型可以按照输入的 ...

  6. UVA129 —— Krypton Factor (氪因素)

    Input and Output In order to provide the Quiz Master with a potentially unlimited source of question ...

  7. POJ 3045 Cow Acrobats

    Description Farmer John's N (1 <= N <= 50,000) cows (numbered 1..N) are planning to run away a ...

  8. [ Java学习基础 ] Java构造函数

    构造方法是类中特殊方法,用来初始化类的实例变量,它在创建对象(new运算符)之后自动调用. Java构造方法的特点如下: 构造方法名必须与类名相同. 构造方法没有任何返回值,包括void. 构造方法只 ...

  9. qemu 模拟-arm-mini2440开发板-启动u-boot,kernel和nfs文件系统【转】

    转自:http://www.cnblogs.com/riskyer/p/3366001.html qemu 本文介绍了如何编译u-boot.linux kernel,然后用qemu启动u-boot和l ...

  10. C++函数的重载

    两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据实参与形参的类型以及个数的最佳匹配,自动确定调用的函数,这就是函数的重载. 两个名字相同的函数必须具有不同的形参,这里的不同指的 ...