在Java虚拟机上班是一种怎样的体验?

在Java虚拟机上班是一种怎样的体验?

 228 人赞同了该回答

 

 利益相关,匿了!

JVM公司里面线程众多,派系林立,尤其是执行引擎那波人,因为是核心部门,经常diss别的部门。

 

 

 

在Java虚拟机上班是一种怎样的体验?

  428 人赞同了该回答

 

 不请自来。

其实在JVM工作没有你们想象的那么辛苦,其他部门不清楚,就拿我所在的垃圾回收部(这名字不好听,叫GC部门吧)来说说。

我的工作是负责执行对象的finalize方法,你们也知道,现在的程序员,很少实现类的这个方法了,所以我的工作大部分时间都可以摸鱼。

--------------------分割线--------------------

评论里有人问我对象的finalize方法是如何被执行的,这里统一回复一下。

JVM的ClassLoader部门在加载一个class的时候,会检查它是否有实现finalize方法,具体细节我不太清楚,请 @AppClassLoader 同学来帮忙解答一下。

如果发现有finalize方法,以后创建这个类的所有对象都会附带创建一个Finalizer对象。

这个Finalizer有两个关键点:

继承自Reference类,本身也是一个引用,引用的正是跟它一起创建的那个对象

里面有一个名叫queue的成员,指向了一个队列: ReferenceQueue,正是 Finalizer的一个静态成员变量。

在Java虚拟机上班是一种怎样的体验?

除此之外,Finalizer里面还有一个静态线程FinalizerThread,这个其实就是我了。我的工作就是不断上面的队列里面取出Finalizer对象,然后执行它引用对象的finalize方法。

什么?你问我Finalizer对象是什么时候进入这个队列里的?这我就不知道了,超出了我的工作范围,可以请 @ReferenceHandler 帮忙解答一下。

以上。

 

 

 

在Java虚拟机上班是一种怎样的体验?

   522 人赞同了该回答

 

  谢邀!

JVM公司整体来说还是挺不错的,各方面条件都还不错。办公大厦有两层,一楼是native层,一堆native层的线程员工在下面办公。我在二楼的Java层,这一层都是Java线程。

我在JVM类加载部门工作,我的Leader是ExtClassLoader,他的Leader是公司高管BootstrapClassLoader

我们部门的工作就是把磁盘上的.class文件加载到内存中,变成一个个可以使用的类。工作嘛还算轻松。不过有一点让我不爽的是部门的双亲委派制度。

在Java虚拟机上班是一种怎样的体验?

图源网络

 

每次遇到新的类需要加载,按照规定都必须请示领导来加载,领导又去请示他的领导来加载。但是高管BootstrapClassLoader只负责加载Java的核心类,我的领导也只负责加载一些扩展类,所以大部分时间请示完了结果他们都加载不了,还得让我去加载。

一来二去的花了不少时间在流程上,瞎耽误工夫。我多次反应这个问题,能不能不请示我直接加载算了,不过每次都被驳回,说是为了安全考虑,他们必须过目。唉,领导不肯放权也是难办!

--------------------分割线--------------------

评论区戾气太重!说我不懂安全也是醉了。

回答一下 @FinalizerThread 同学的问题。

确实如他所说,我们ClassLoader会去检查类有没有实现finalize方法,检查结果会保存在Klass结构中的AccessFlags里。

这是一个很重要的字段,记录了类的很多属性:

在Java虚拟机上班是一种怎样的体验?

有了这些信息,创建对象的时候就可以检查标记来决定是否创建Finalizer对象了。

 

以上。 

 

 

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpsjxw.html