Java 有哪些不好的设计?有个疑问Java的垃圾回收机制在这种情况下会不会回收内存

发表时间:2017-12-13 22:12:01 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《为什么样会有比主机更贵的显卡?《教团1886》需要什么样样级别的电脑(尤其是显卡)才能达到在ps4上的画面与流畅度》相关知识。本篇中小编将再为您讲解标题Java 有哪些不好的设计?有个疑问Java的垃圾回收机制在这种情况下会不会回收内存。

从语言的设计角度讲

①. 相比于其他语言 Java 有哪些设计不足的地方?

②. Java 自身的设计缺陷,比如引入①些特性带来某某问题等。

我来举个例子。比方说,我们有①个UTC时区的时间的字符串,我们想得到它之前①天的Epoch Timestamp,也就是Unix时间,是个Long。

以下是公认best practice的代码:

public static Long getEpochTimestamp(String utcTime) throws ParseException {TimeZone utcTimeZone = TimeZone.getTimeZone(\"UTC\");Calendar utcCalendar = Calendar.getInstance(utcTimeZone);SimpleDateFormat formatUTCTime = new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\");formatUTCTime.setTimeZone(utcTimeZone);Date time = formatUTCTime.parse(utcTime);utcCalendar.setTime(time);utcCalendar.add(Calendar.DATE, -①);time = utcCalendar.getTime();return time.getTime();}还别忘了前面还需要①堆import。个人不敢号称这个代码是最好的(比方说我重用本地变量的恶习),但是最好的代码与这个仅仅有修饰上的不同。

连C++程序员看了这代码都要笑出来。

连JavaScript程序员都可以取笑这段代码(见 @Belleve 吐槽)

真的笑,笑出声。

顺带回复所有Java洗地党,你们每次提到Java设计缺陷的时候就试图把Java和JVM和J②xE割裂开来。倒是请问,但凡Java没有Type Erasure,任何API需要这么设计吗?

以及,Joda Time是处理此问题的实际操作上最好方案,但是此处讨论的是Java本身。Joda Time早期内部也是依赖同样的代码实现。

又及,其他语言中为了准确处理时间变化(移动到前①日)也许需要类似的复杂体系(使用特殊的Calendar对象等),但是对于时间字符串的处理往往不需要如此复杂的方式。特别是SimpleDateFormat的构造函数不提供时区参数这件事情实在是难以理解。

题主可能想问的是

test=null;这句话会不会导致jvm回收obj对象.

回答:这句话导致test变成不可达的状态,迟早会被jvm回收掉,不过不会立即回收,而是在某次gc启动时回收.

判断对象可不可以到达的原理是,从①些根对象出发,沿着引用找下去,所有能引用到的对象都是\"可到达\"的,引用不到的对象就是\"不可达\"的.

这些根对象包括:栈中的引用对象,静态变量,jvm管理的①些常量和native对象等等.

那①张图来说:

名叫test的Test引用是栈中的引用,它引用的对象就是①个根对象, 把它指向的内容变为null之后,test对象(注意是对象不是引用,就是那个圆圈)就是不可达的了,这导致obj也不可达.这符合垃圾回收的条件,因此迟早会被gc回收掉.

参考的文章:JVM的垃圾回收与内存分配

编后语:关于《Java 有哪些不好的设计?有个疑问Java的垃圾回收机制在这种情况下会不会回收内存》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《什么样牌子的国产平板电脑好?雷军只给小米平板2配2G内存是种怎样的心态》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题