供需问题,跟技术无关,
大部分 Java 程序员 可能一辈子都不会接触 JNI 跟 堆外代码,何况能被 JNI 的库 99%都是社区大佬写的,剩下可能 1%的情况是公司万年前某个老库的 C/C++的包。
社区大佬写的库 基本上不存在泄露的问题,即使泄露了 也是开源社区去处理,轮不到你写应用的来处理,公司也不会为你这个技能买单,因为它只花了 15k 招了个外包,写库的那个人在美国拿着 30k 的美刀,只是顺带下班 凭着业余爱好 帮你修复了 某个开源 JNI 库的里面 C 代码的某个野指针
另外 GC 这个东西,大方向就是一个有向图可达性分析算法,就是一个图论算法,只要你智商不够低,就能明白大方向上就是 GC 的目标就是 尽可能快速分析完这个图,看下哪些点是不可达的,
但是程序里面引用关系又是随时变化的,那么就是在 GC 吞吐率 跟实时性上 做 trade-off ,没有听说过 既能提高吞吐率又有更高实时性的东西,另外大部分互联网程序 对实时性要求并不高,你都用 java 了 还追求啥实时性,所以就是牺牲 实时性来做 GC 吞吐
分代的原因是因为 能活过几轮的 GC 的 对象都是人精,就像你的 static final Object obj 里面 obj 引用的对象,一般活过几轮之后,它就不太可能在整个生命周期中被清除出去
@
sagaxu #11