JVM面试总结

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_22172133/article/details/90266640

打个广告,帮朋友卖点东西,东西超便宜的哟【衣服鞋子等】,厂家直接出货,绝对低于市场价!!! 一般都比市场价便宜3—7折【都是牌子货】,如果您感兴趣,可以扫描屏幕下方的二维码,感谢关注!!!

微信

  • 类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,他们的执行顺序

        先静态、先父后子。 

        优先级:【父类>子类】 静态代码块 > 【父类>子类】非静态代码块  > 【父类>子类】构造函数 

  • JVM内存分配

  • JVM垃圾回收机制

        分代垃圾回收机制:不同的对象生命周期不同。把不同生命周期的对象放在不同代上,不同代上采用最合适它的垃圾回收方式进行回收。 JVM中共划分为三个代:年轻代、年老代和持久代, 

  1. 年轻代:存放所有新生成的对象; 
  2. 年老代:在年轻代中经历了N次垃圾回收仍然存活的对象,将被放到年老代中,故都是一些生命周期较长的对象; 
  3. 持久代:用于存放静态文件,如Java类、方法等。 
  • 何时触发MinorGC等操作

        判断对象是否需要回收的方法有两种: 

1.引用计数 ,当某对象的引用数为0时,便可以进行垃圾收集。 

2.对象引用遍历 ,如果某对象不能从这些根对象的一个(至少一个)到达,则将它作为垃圾收集。在对象遍历阶段,gc必须记住哪些对象可以到达,以便删除不可到达的对象,这称为标记(marking)对象。

  • 触发GC(Garbage Collector)的条件

1)GC在优先级最低的线程中运行,一般在应用程序空闲即没有应用线程在运行时被调用。

2)Java堆内存不足时,GC会被调用。

  • jvm中一次完整的GC流程(从ygc到fgc)是怎样的,重点讲讲对象如何晋升到老年代等

        对象优先在新生代区中分配,若没有足够空间,Minor GC; 大对象(需要大量连续内存空间)直接进入老年态;长期存活的对象进入老年态。如果对象在新生代出生并经过第一次MGC后仍然存活,年龄+1,若年龄超过一定限制(15),则被晋升到老年态。

  • 对Java内存模型的理解,以及其在并发中的应用

        所有变量的存储都在主内存,每条线程还都有自己的工作内存,线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作必须在工作内存完成,而不能直接读取主内存中的变量。不同的线程直接无法访问对方工作内存中的变量,线程间变量的传递均需要通过主内存来完成。 

  • JVM常用参数

        堆设置、回收器选择(串行、并行、并发收集器)

  • volatile的语义,它修饰的变量一定线程安全吗

        一个变量被定义为volatile之后,具备两重语义:①保证此变量对所有线程的可见性,即当一条线程修改了这个值,新值对于其他所有线程来说是立即得知的,普通变量需要通过主内存传递。②禁止指令重排序优化。 

        Volatile修饰的变量不一定是线程安全的,eg非原子操作a++等

  • 说一下强引用、软引用、弱引用、虚引用以及他们之间和gc的关系

强引用:new出的对象之类的引用,只要强引用还在,永远不会回收。

软引用:引用但非必须的对象,内存溢出异常之前,回收。

弱引用:非必须的对象,对象能生存到下一次垃圾收集发生之前。 

虚引用:对生存时间无影响,在垃圾回收时得到通知。

猜你喜欢

转载自blog.csdn.net/qq_22172133/article/details/90266640
今日推荐