JVM三(调优与程序本质)

这里写自定义目录标题

  • 前言
  • JVM性能调优
  • 对象什么时候可以回收
  • 为什么 会有新生代和老年代
  • 对象空间到持久层(方法区)
  • 抽象
  • 继承
  • 多态
  • 构造函数
  • 接口

前言

请在看这篇文章之前先看
https://blog.csdn.net/dtttyc/article/details/89005771

JVM性能调优

使用什么工具?
Jconsole查看

-Xmx  Heap最大
-Xms 初始
-Xmn young区大小
-Xss 每个线程Stack大小
-XX:PermSize 非堆内存初始化大小
-XX:MaxPermSize 最大非堆内存大小

对象什么时候可以回收

  1. 引用计数器,如果有引用加1, 引用消失减一

引发问题,加一容易,减一不容易,.找到对象不容易
JVM三(调优与程序本质)_第1张图片

  1. java虚拟机中的栈作为搜索,可以了解一下Gc Roots,当没有再关联引用那么就是可以回收的

为什么 会有新生代和老年代

为了高效.根据对象的存活时间划分,避免全局扫描

对象空间到持久层(方法区)

JVM三(调优与程序本质)_第2张图片

a1.m1()

  1. 在栈中找到引用堆的对象
  2. 在堆中根据对象类型指针找到持久层方法中的classA结构
  3. 找到具体方法,让cpu执行
  4. 执行的时候栈会存储临时变量和局部变量分配内存, 当方法执行的时候栈也在改变

抽象

对过程抽象
对数据抽象
用类去封装数据和过程

class ABC{
  //属性(数据)
  //方法(过程,操作,行为)
}

继承

扩展,代码重用.正是有了继承才有了面向对象的第三大特性多态
复用不单单是在继承有, 我再A中new出b对象,依旧可以访问b对象里面的内容

多态

一个对象多种形态,由于继承而产生了多态
1人中一形态, 人是动物的一种形式, 人是生物的一种形态, 人是物体的一种形态, 为什么呢?
是因为他们都继承了动物,生活,物体.这也就是 继承产生了多态

Animal a = new Bird()
主观认为      客观存在,  从不同观察角度看会运行不同的类
编译时类型    运行时类型  不同的运行时期

a.sing() 编译错误, 编译不让通过, 因为Bird是运行时存在的
我们把子类对象当做父类对象来看, 那么就只能访问父类中有定义的熟悉和方法
在编译器的时候我们可以让他绕过,也就是说不会报错, 但是对于jvm来说是不会被欺骗也就是根据不同角度运行不同的类

构造函数

1任何类都有构造函数,如果没有明确的定义,则系统会默认加上构造函数
2 任何一个类的构造函数第一行只能是
this(XXX) or super (XXX)
如果不明确声明,系统默认加上调用super()

接口

1弥补单继承缺点
2形成一个体系

你可能感兴趣的:(JVM三(调优与程序本质))