1、通过类的构造方法创建对象
Cat cat = new Cat(),右端的Cat()实际是无参构造方法
2、JVM三个区域
栈区:
stack,方法执行的内存模型,每个方法被调用都会创建一个栈帧,存储局部变量,操作数,方法出口,遵循先进后出原则,JVM为每一个线程创建一个栈区,用于存储方法的信息,比如实际参数,局部变量等,栈属线程私有,不能共享,栈有系统自动分配,在内存中是连续的。
堆区:
heap,用于存储创建好的对象,JVM只有一个堆,被所有的线程共享,是一个不连续的空间
方法区:
method area又叫静态区,被所有线程共享,实际也是堆,只是用于存储类、常量相关的信息,用来存储程序中永远不变或者唯一的信息,比如类信息、静态变量、字符串常量等。
3、关于垃圾回收机制
(1) 什么是java的垃圾回收机制?垃圾回收机制的要点是什么?
垃圾回收机制,garbage collection ,JVM会自行处理清理无效的内存
要点:发现无用的对象,回收无用的对象的内存
(2) 如何确定内存中的哪些对象是垃圾?
方法一:是引用计数,当被引用数字变为0,则表示无用对象
方法二:看是否引用可达,从一个节点开始,寻找对应的节点,找到这个节点之后再继续寻找这个节点的引用节点,当所有的节点寻找完毕之后,剩余的节点就被认为是没有被引用的节点,即是无用的节点。
2. 通用分代垃圾回收详解(年轻代,年老代,持久代)
(1) 垃圾回收机制核心思想是不同生命周期的对象被清理的可能性不同,所以不同生命周期的对象采取不同的回收算法。
年轻代(Eden)
(2) 什么是minorGC,什么是majorGC,什么是fullGC
minorGC负责清理年轻代的内存,采用复制算法,频繁操作
majorGC负责清理年老代的内存
fullGC负责清理年轻代和年老代区域的内存
持久代生命周期与类相关,几乎不清理。
(3) 垃圾回收的过程是什么?
新创建的对象通常会被放在Eden中,当Eden满了(达到一定比例)就会触发minorGC,将无用的对象清理掉,将有用的对象复制到survivor1中,同时清空Eden区
当Eden再次满了,会将S1中不能清空的对象存到另一个survivor 2中,比如S2,同时将S1中有用的对象也复制到S2,保证Eden、S1都被清空。
重复多次(默认15次)survivor中没有被清理的对象,会被复制到old(老年代中)
old中存满达到一定比例,则会触发完整垃圾回收机制(FullGC)
3、创建对象的过程1、 给对象分配内存空间,同时对对象属性进行初始化,初始化默认为0或者null或者false
2、 执行属性值的显示初始化
3、 执行构造方法
4、 返回对象的地址给相关的变量
4、 被static修饰的变量和方法从属于类,没被static修饰的变量和方法从属于对象。
5、静态初始化块的作用是初始化类,加载类的时候执行静态初始化块。
6、如果需要使用不同包下的同名类则详细的列明包的名称,比如Date类
java.util.Date d = new java.util.Date();即可