Vue3+Nuxt3打造SSR网站应用,0到1实现服务端渲染吾爱

download:Vue3+Nuxt3打造SSR网站应用,0到1实现服务端渲染无密 基础知识 【Vue3+Nuxt3打造SSR网站应用,0到1实现服务端渲染吾爱】本章不会介绍java语言本身,相信大家对此已有足够熟悉。相对的,会从工程应用角度,讲解几个有意思的技术点。
1.1 由源码到apk
源代码是如何经历多重处理,最终呈现在apk中,了解这个过程,有助于我们认清java代码腐化的一些原因。从apk构建视角来看,java(kotlin)代码完整处理过程如下:
上述流程中,无论是java还是kotlin代码,都会首先编译为jvm字节码。这里需要注意,app/子工程中的local jar、flat aar,以及通过外部依赖方式引入的jar、aar,都是直接包含编译好的jvm字节码,这会带来如下优劣势:

  1. 【优势】无需再进行由源码到字节码的编译,在代码完全相同情况下,工程的模块化(jar/aar)程度越高,越能够缩短整体apk构建耗时;
  2. 【劣势】提前编译好的jvm字节码,不会再进行源码编译期各项检查,容易出现代码间引用关系不匹配情况,具体后文「不兼容引用」部分会详述。
  3. 此外,关于jvm和Dalvik字节码,一个最核心的区别是:前者的指令,基于栈,后者基于寄存器。基于寄存器的优势,主要是运行时指令执行性能的提升。此外,jvm字节码,每个类位于独立.class文件,而dalvik字节码,所有类均位于同一(几)个dex文件,能够更好的复用代码数据,因此存储占用更低。
1.2 使用java8 java8是一个比较有代表性的java语言版本,在Android中使用java8,这个话题本身会比较复杂。首先,从java8新内容来看,主要分为新语言特性和新API;其次,从编码到运行的整个链路来看,涉及编译工具链、设备预装jdk、设备vm(Dalvik/Art)三个部分的支持;此外,Android本身使用的jdk并不是标准的oracle jdk或openjdk,而是进行了一些定制后的子集。
java8新语言特性,有一些涉及到新的jvm指令集,这些需要运行时vm能够支持。否则,就需要在编译工具链中,能够使用兼容的指令集来替换这些新指令集的功能,这个过程就是大家熟悉的“脱糖”,AndroidGradlePlugin3.0及以上版本,已经对此实现了较好的支持。由于Android系统中Art虚拟机,直到8.0版本,才完全实现对java8新指令集的支持,因此当apk构建的minSdkVersion设置为26(8.0)以下时,会触发脱糖处理

    推荐阅读