做网站刷点击,女装网站建设费用预算,给做网站公司写锦旗语,wordpress腾讯cos插件类的实例化顺序
先静态、先父后子
先静态#xff1a;父静态子静态
优先级#xff1a;父类子类 静态代码块非静态代码块构造函数
一个类的实例化过程#xff1a;
①#xff0e;父类的static代码块#xff0c;当前类的static;
②#xff0e;顺序执行…类的实例化顺序
先静态、先父后子
先静态父静态子静态
优先级父类子类 静态代码块非静态代码块构造函数
一个类的实例化过程
①父类的static代码块当前类的static;
②顺序执行父类的普通代码块
③父类的构造函数
④子类的普通代码块
⑤子类(当前类)的构造函数按顺序执行
⑥子类方法的执行 jvm内存分配
根据jvm规范jvm内存共分为虚拟机栈、堆、方法区、程序计数器和本地方法栈五个部分。 .方法区主要存储类信息常量池(static常量和static变量)编译后的代码(字节码)等信息 .堆初始化的对象成员变量(非static变量)所有的对象实例和数组都要在堆上分配 .栈栈的结构是栈帧组成的调用一个方法就压入一帧帧上存储局部变量表操作数栈方法出口等信息局部变量表存放的是八大基础类型加一个应用类型所以还是一个指向地址的指针 .程序技术器记录当前线程执行的行号 .本地方法栈主要为Native方法服务。
Java8的内存分带改进
从永久代到元空间在小范围自动拓展永生代避免溢出。
JVM垃圾回收机制何时触发MinorGC等操作 分代垃圾回收机制不同的对象生命周期不同。把不同生命周期的对象放在不同代上不同代上采用最合适的垃圾回收方式进行回收。
JVM中共划分为三个代年轻代、年老代和持久代。
年轻代存放所有新生成的对象
年老代在年轻代中经历了N次垃圾回收仍然存活的对象将被放在年老代中故都是一些生命周期较长的对象
持久代用于存放静态文件如Java类、方法等。
新生代的垃圾回收器命名为“Minor Gc”,老生代的垃圾回收器命名为“Full Gc 或 Major Gc”。其中在System.gc()强制执行的是Full Gc。
判断对象是否需要回收的两种方法
①引用计数
当某个对象的引用数为0时便可以进行垃圾回收。
这种方法的最大缺点是无法检测出循环引用。如父对象有一个对子对象的引用子对象反过来引用父对象。这样它们的引用计数 永远也不可能为0.
②可达性分析算法
可达性分析算法是从离散数学中的图论引入的程序把所有的引用关系看做一张图从一个节点GC ROOT开始寻找对应的引用节点找到这个节点以后继续寻找这个节点的引用节点当所有的引用节点寻找完毕之后剩余的节点则被认为是没有引用的节点即无用的节点无用的节点将会被判定为垃圾回收的对象。
触发GC的条件
①GC在优先级最低的线程中运行一般在没有应用程序即没有应用线程在运行时被调用
②Java堆内存不足时GC会被调用。
JVM中完整的GC流程
①对象优先在新生代中分配如果内存不足Minor GC;
②大对象(需要大量连续内存空间)直接进入老年代长期存活的对象进入老年代。如果对象在新生代经过一次 Minor GC回收仍然存活年龄1.若年龄超过一定限制(15)则晋升为老年代。
你知道哪几种垃圾回收器各自的优缺点是什么
Eden和Survivor的分配比例
默认比例8:1。大部分对象都是朝生夕死。
复制算法的基本思想就是将内存分为两块每次只使用其中的一块当这一块内存用完就会将活着的对象复制到另一块上。复制算法不会产生内存碎片。
Java内存模型以及在并发中的应用
Java内存模型的主要目标定义程序中各个变量的访问规则。
Java 线程之间的通讯有java内存模型控制。
所有变量的存储都在主内存每个线程都有自己的工作内存线程的工作内存中保存了被线程引用到的变量的主内存副本拷贝线程对变量的所有操作都必须在工作内存中进行不同的线程之间无法直接访问对方工作内存中的变量线程之间变量的传递必须通过主内存来传递。 线程间的通讯
①首先线程A把本地内存中更新的变量刷新到主内存中
②然后线程B在主内存中读取线程A已经更新过的变量。
volatile的语义用volatile修饰的变量一定是线程安全吗
一个变量被定义为volatile后有两重含义
①保证此变量对所有线程的可见性当一个线程修改了此变量新值对于其它线程都是立即得知的普通变量需要通过主内存来传递
②禁止指令的重排优化。
Valtile 修饰的变量不一定是线程安全的eg非原子操作a等。
对象之间的引用有哪些
对象之间的引用主要有强引用、弱引用、软引用和虚引用。
强引用new出的对象之间的引用只要强引用还在就永远不会被回收
弱引用非必须的对象对象能存活到下一次垃圾收集之前
软引用引用但非必须的对象内存溢出异常之前回收
虚引用对生存时间无影响 在垃圾回收事得到通知。