JVM三(调优与程序本质)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dtttyc/article/details/89074147

前言

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

JVM性能调优

使用什么工具?
Jconsole查看

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

对象什么时候可以回收

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

引发问题,加一容易,减一不容易,.找到对象不容易
在这里插入图片描述

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

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

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

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

在这里插入图片描述

a1.m1()

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

抽象

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

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

继承

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

多态

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

扫描二维码关注公众号,回复: 6212001 查看本文章
Animal a = new Bird()
主观认为      客观存在,  从不同观察角度看会运行不同的类
编译时类型    运行时类型  不同的运行时期

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

构造函数

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

接口

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

猜你喜欢

转载自blog.csdn.net/dtttyc/article/details/89074147