文章分类 -  极客时间

上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 45 下一页
摘要:在前面的文章中,我曾使用了不少工具来辅助讲解,也收到了不少同学留言,说不了解这些工具,不知道都有什么用,应该怎么用。那么今天我便统一做一次具体的介绍。本篇代码较多,你可以点击文稿查看。 javap:查阅Java字节码 javap是一个能够将class文件反汇编成人类可读格式的工具。在本专栏中,我们经 阅读全文
posted @ 2023-01-10 09:50 易先讯 阅读(6) 评论(0) 推荐(0)
摘要:在读博士的时候,我曾经写过一个统计Java对象生命周期的动态分析,并且用它来跑了一些基准测试。 其中一些程序的结果,恰好验证了许多研究人员的假设,即大部分的Java对象只存活一小段时间,而存活下来的小部分Java对象则会存活很长一段时间。 (pmd中Java对象生命周期的直方图,红色的表示被逃逸分析 阅读全文
posted @ 2023-01-10 09:49 易先讯 阅读(10) 评论(0) 推荐(0)
摘要:你应该听说过这么一句话:免费的其实是最贵的。 Java虚拟机的自动内存管理,将原本需要由开发人员手动回收的内存,交给垃圾回收器来自动回收。不过既然是自动机制,肯定没法做到像手动回收那般精准高效[1] ,而且还会带来不少与垃圾回收实现相关的问题。 接下来的两篇,我们会深入探索Java虚拟机中的垃圾回收 阅读全文
posted @ 2023-01-10 09:48 易先讯 阅读(5) 评论(0) 推荐(0)
摘要:在Java程序中,我们拥有多种新建对象的方式。除了最为常见的new语句之外,我们还可以通过反射机制、Object.clone方法、反序列化以及Unsafe.allocateInstance方法来新建对象。 其中,Object.clone方法和反序列化通过直接复制已有的数据,来初始化新建对象的实例字段 阅读全文
posted @ 2023-01-10 09:48 易先讯 阅读(13) 评论(0) 推荐(0)
摘要:上回讲到,为了让所有的动物都能参加赛马,Java 7引入了invokedynamic机制,允许调用任意类的“赛跑”方法。不过,我们并没有讲解invokedynamic,而是深入地探讨了它所依赖的方法句柄。 今天,我便来正式地介绍invokedynamic指令,讲讲它是如何生成调用点,并且允许应用程序 阅读全文
posted @ 2023-01-09 10:55 易先讯 阅读(10) 评论(0) 推荐(0)
摘要:前不久,“虚拟机”赛马俱乐部来了个年轻人,标榜自己是动态语言,是先进分子。 这一天,先进分子牵着一头鹿进来,说要参加赛马。咱部里的老学究Java就不同意了呀,鹿又不是马,哪能参加赛马。 当然了,这种墨守成规的调用方式,自然是先进分子所不齿的。现在年轻人里流行的是鸭子类型(duck typing)[1 阅读全文
posted @ 2023-01-09 10:54 易先讯 阅读(12) 评论(0) 推荐(0)
摘要:今天我们来聊聊Java里的反射机制。 反射是Java语言中一个相当重要的特性,它允许正在运行的Java程序观测,甚至是修改程序的动态行为。 举例来说,我们可以通过Class对象枚举该类中的所有方法,我们还可以通过Method.setAccessible(位于java.lang.reflect包,该方 阅读全文
posted @ 2023-01-09 10:54 易先讯 阅读(16) 评论(0) 推荐(0)
摘要:你好,我是郑雨迪。今天我们来讲讲Java虚拟机的异常处理。 众所周知,异常处理的两大组成要素是抛出异常和捕获异常。这两大要素共同实现程序控制流的非正常转移。 抛出异常可分为显式和隐式两种。显式抛异常的主体是应用程序,它指的是在程序中使用“throw”关键字,手动将异常实例抛出。隐式抛异常的主体则是J 阅读全文
posted @ 2023-01-09 10:53 易先讯 阅读(16) 评论(0) 推荐(0)
摘要:我在读博士的时候,最怕的事情就是被问有没有新的Idea。有一次我被老板问急了,就随口说了一个。 这个Idea究竟是什么呢,我们知道,设计模式大量使用了虚方法来实现多态。但是虚方法的性能效率并不高,所以我就说,是否能够在此基础上写篇文章,评估每一种设计模式因为虚方法调用而造成的性能开销,并且在文章中强 阅读全文
posted @ 2023-01-09 10:53 易先讯 阅读(6) 评论(0) 推荐(0)
摘要:前不久在写代码的时候,我不小心踩到一个可变长参数的坑。你或许已经猜到了,它正是可变长参数方法的重载造成的。(注:官方文档建议避免重载可变长参数方法,见[1]的最后一段。) 我把踩坑的过程放在了文稿里,你可以点击查看。 void invoke(Object obj, Object... args) { 阅读全文
posted @ 2023-01-09 10:53 易先讯 阅读(6) 评论(0) 推荐(0)
摘要:听我的意大利同事说,他们那边有个习俗,就是父亲要帮儿子盖栋房子。 这事要放在以前还挺简单,亲朋好友搭把手,盖个小砖房就可以住人了。现在呢,整个过程要耗费好久的时间。首先你要请建筑师出个方案,然后去市政部门报备、验证,通过后才可以开始盖房子。盖好房子还要装修,之后才能住人。 盖房子这个事,和Java虚 阅读全文
posted @ 2023-01-09 10:52 易先讯 阅读(14) 评论(0) 推荐(0)
摘要:如果你了解面向对象语言的发展史,那你可能听说过Smalltalk这门语言。它的影响力之大,以至于之后诞生的面向对象语言,或多或少都借鉴了它的设计和实现。 在Smalltalk中,所有的值都是对象。因此,许多人认为它是一门纯粹的面向对象语言。 Java则不同,它引进了八个基本类型,来支持数值计算。Ja 阅读全文
posted @ 2023-01-09 10:52 易先讯 阅读(7) 评论(0) 推荐(0)
摘要:我们学院的一位教授之前去美国开会,入境的时候海关官员就问他:既然你会计算机,那你说说你用的都是什么语言吧? 教授随口就答了个Java。海关一看是懂行的,也就放行了,边敲章还边说他们上学那会学的是C+。我还特意去查了下,真有叫C+的语言,但是这里海关官员应该指的是C++。 事后教授告诉我们,他当时差点 阅读全文
posted @ 2023-01-09 10:52 易先讯 阅读(11) 评论(0) 推荐(0)
摘要:前不久我参加了一个国外程序员的讲座,讲座的副标题很有趣,叫做:“我如何学会停止恐惧,并且爱上Java虚拟机”。 这句话来自一部黑色幽默电影《奇爱博士》,电影描述了冷战时期剑拔弩张的氛围。 程序员之间的语言之争又未尝不是如此。写系统语言的鄙视托管语言低下的执行效率;写托管语言的则取笑系统语言需要手动管 阅读全文
posted @ 2023-01-09 10:51 易先讯 阅读(7) 评论(0) 推荐(0)
摘要:你好,我是周爱民。 《JavaScript核心原理解析》已经完结一段时间了。在这段时间里,我依然收到了很多用户的留言,很感谢你一直以来的认真学习和支持! 为了帮助你检验自己的学习效果,我特别给你准备了20道结课测试题,例题如下: 例题1. 如下代码中是“直接调用的eval”的有___。 A:with 阅读全文
posted @ 2023-01-09 10:50 易先讯 阅读(9) 评论(0) 推荐(0)
摘要:我常常讲一个比喻,这个比喻是说有一座塔,塔门口有两尊石狮子。 如果有人登塔,那么进塔之前他固然是会看到这个狮子的,往上走,正好到塔后,石狮子就没有了,于是这个人说“就我一楼之所见,没有狮子”;绕到前面,一看,石狮子好好地在那儿,于是这个人又说“于我所见,有狮子”。如此行至二楼,他又会说“没有狮子”, 阅读全文
posted @ 2023-01-09 10:49 易先讯 阅读(11) 评论(0) 推荐(0)
摘要:你好,我是周爱民,欢迎回到我的专栏。 今天是专栏最后一讲,我接下来要跟你聊的,仍然是JavaScript的动态语言特性,主要是动态函数的实现原理。 标题中的代码比较简单,是常用、常见的。这里稍微需要强调一下的是“最后一对括号的使用”,由于运算符优先级的设计,它是在new运算之后才被调用的。也就是说, 阅读全文
posted @ 2023-01-09 10:49 易先讯 阅读(14) 评论(0) 推荐(0)
摘要:你好,我是周爱民。欢迎回到我的专栏。书接上回,这一讲我们仍然讲动态执行。 之前我说到过,setTimeout和setInterval的第一个参数可以使用字符串,那么如果这个参数使用字符串的话,代码将会在哪里执行呢?毕竟当定时器被触发的时候,程序的执行流程“很可能”已经离开了当前的上下文环境,而切换到 阅读全文
posted @ 2023-01-09 10:49 易先讯 阅读(16) 评论(0) 推荐(0)
摘要:你好,我是周爱民。 今天我们讨论动态执行。与最初的预告不同 ,我在这一讲里把原来的第20讲合并掉了,变成了20~21的两讲合讲,但也分成了上、下两节。所以,其实只是课程的标题少了一个,内容却没有变。 动态执行是JavaScript最早实现的特性之一,eval()这个函数是从JavaScript 1. 阅读全文
posted @ 2023-01-09 10:48 易先讯 阅读(4) 评论(0) 推荐(0)
摘要:你好,我是周爱民。 上一讲,我们说到如何将复杂的类型转换缩减到两条简单的规则,以及两种主要类型。这两条简单规则是: 从值x到引用:调用Object(x)函数。 从引用x到值:调用x.valueOf()方法;或,调用四种值类型的包装类函数,例如Number(x),或者String(x)等等。 两种主要 阅读全文
posted @ 2023-01-09 10:48 易先讯 阅读(12) 评论(0) 推荐(0)

上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 45 下一页