Java 类的加载过程
前言
上次说到了类的加载器,分为 BootstrapClassLoader
、 ExtClassLoader
、 AppClassLoader
。具体是怎么加载的没说,这次来说一说类的加载过程,主要分为装载、链接、初始化。其中链接又可以分为验证、准备、解析。
上次说到了类的加载器,分为 BootstrapClassLoader
、 ExtClassLoader
、 AppClassLoader
。具体是怎么加载的没说,这次来说一说类的加载过程,主要分为装载、链接、初始化。其中链接又可以分为验证、准备、解析。
做开发的都知道 HTTP
使用明文进行传输内容,就是在裸奔,一点安全感都没有。
在传输的过程中任何一个节点都可以对内容进行监听,篡改,冒充。
为了解决 HTTP
存在的这些问题就出现了 HTTPS
。
上一篇我们了解了字节码的结构,这些字节码文件都是什么时候被加载到内存中的,今天就来聊聊类加载。
Java
开发都知道 .java
文件编译后得到的是 .class
文件,这个文件是 Java
虚拟机能够识别加载的文件。有了这个字节码文件 Java
实现一次编写到处运行才成为可能。
然而我们平时都是写 .java
文件,很少接触 .class
文件,今天就来看看 .class
文件中有什么秘密,它长什么样子。
之前我们介绍了 JVM 运行时内存是怎么分配的,其中方法区和堆是线程共享的,这里的对象如果不需要使用了,需要释放掉。
但我们很少像 C/C++ 一样去自己管理,释放内存,这其中就要归功于 Java GC
,它在背后默默的工作着。
虽然 Java GC
在背后默默的工作着,但是我们一直都不了解它,今天来看看它是怎么工作的,这样出现问题了才有应对之法。
JVM
是 Java
程序员绕不过去的坎,今天学习下 Java
虚拟机运行时是怎么分配内存的。
JVM
规范中规定, JVM
运行时内存分为程序计数器、虚拟机栈、本地方法栈、方法区、堆,这5个部分,如下图所示。
我经常要在 macOS 和 Linux 下来回切换使用,使用的过程中,有许多不便之处。比如快捷键就是一个非常头疼的问题,需要记两套不同的快捷键,而且两个平台的键位还不一样。
熟练使用快捷键可以成吨的提高效率。于是在两个平台之间使用我都要刻意去配置让两个平台的快捷键尽肯能的相似,这样开发效率才不会受到太多的影响。
今年开工以来,一直接触图表相关的开发,经过选择最后采用 MPAndroidChart ,期间碰到了一些问题,踩了不少坑。特来总结一下,以免日后忘记。这些知识点虽然不难,但是非常零碎,找起来比较麻烦。
由于我经常需要用到 Linux
就不可避免的要经常需要安装各种 Linux
实在是非常耗费时间的事情,装系统可能不下于百次了。
每次装系统都要花费许多时间,于是我就考虑能不能写一个脚本让其自动化安装,以节约时间。
虽然现在安装 Linux
非常方便,尤其是带有良好的安装界面,基本上只要点击下一步就能够装好。
但是我的需求是不需要带有 GUI 的,毕竟在虚拟机上使用 GUI 体验并不是非常好。
之前我们介绍了 GPG
的使用,也介绍了用 GPG
来管理自己的密码。
今天我们来讲一讲在 Emacs
中配合 GPG
加密 Org mode
。
前面我们讲的 GPG
的相关内容,对于大多数人来可能用的不多。今天我们就来实际的使用一下,用它来管理你的密码。
密码是我们日常都会用到的,而且使用很多,每个网站都有不同的账号和不同的密码。如果你使用同样的密码,那就非常危险了,一旦某个密码泄漏了,其他网站也会跟着遭殃。定期修改密码还是非常有必要的。
pass
是一个符合 Unix
哲学的命令行工具,它被设计成用来管理密码,并且是开源的,如果你不放心,可以去查看代码,或者改成你需要的。不要看到命令行就怕了,它有很多客户端,可以满足大多数人使用。
类似 pass
的产品有我们常见的 1Password
、 LastPass
等。 1Password
是个收费的软件, LastPass
虽然也有免费的版本,但是密码放在别人那里总是不放心。毕竟之前也出过幺蛾子。如果你有使用这些产品,也可以非常方便导入到 pass
中。
pass
使用 GPG
非对称加密,这就是我们选择它的原因。
经过前面的两次的学习,各位小伙伴应该能够满足日常使用了。今天我们把剩下的一些知识给讲完,将来会用到的。
上一篇文章我们了解了怎么使用 GPG
进行加密、解密、签名。
这篇来讲讲密钥的导入导出以及子密钥的使用。
提到 GPG
不得不提一下 PGP(Pretty Good Privacy)
, PGP
最开始是由 Phil Zimmermann
开发,开发的目的是为了躲避监视,如果文件在网络上明文传输,那是多么危险。 PGP
虽然受很多人喜爱,但是是个商业软件,不能自由使用。所以自由基金会决定自己开发一个取名叫 GPG
,这就是 GPG
的由来。 GPG
和 PGP
都遵循 OpenPGP
加解密标准, 现在 PGP
被赛门铁克公司收购了。
Photo by NordWood Themes on Unsplash
今年读书比较多,大多数是电子书。还有两本纸质书,其中一本是在书店里看完的,用了 4 天下班后的两个小时看完的,比较新奇的体验。
我以前看书没有做笔记的习惯,有的能想起来书名,具体就要整本书的去找。如果不幸忘记,根本无从下手。所以今年用电子书看的会做一些笔记,看完之后会导出,然后使用 Org Mode
进行整理。这样提高了我查找的效率。
最近做实验,需要一个新的 Linux
环境来折腾,于是就去下载了最新版的 Manjaro
。
按照常规安装好虚拟机之后,我还会安装 Parallels tools
来更好的体验 Linux
。 Parallels tools
可以方便的在宿主机和虚拟机之间拷贝文件和共享文件,当然还有最重要的就是显示效果会好上一大截,鼠标移动不会卡顿,窗口的缩放可以自适应等,所以没有理由不装。
在安装的过程中碰到了安装失败的情况,下面记录一下解决的过程。
AOSP
是 Android 开放源码项目,通俗点就是整个 Android
的源码。有了 AOSP
我们就可以在源码的层面去了解整个 Android
系统。甚至可以自己基于 AOSP
去定制自己系统,这也是众多 ROM
的直接或间接起源。
平时需要画 UML
图,用的比较多的就是 StarUML 、 Visio
、 Rational Rose
。其中 StarUML 是跨平台的免费软件,相比其他的收费软件是个不错的选择。
今天要介绍的是PlantUML它是一个开源的用文字来描述的工具,简单来说就是用文字去写出各种 UML
图,而不是用鼠标去拖拽。上面介绍的工具都是通过鼠标去拖拽的方式去画出各种 UML
图。可能由于是个开发的缘故,天生就喜欢纯文本的东西,解析起来方便,占用内存小,改起来也方便,只要一个文本编辑器就可以改。当然我使用的原因是可以在 Emacs
中通过 Org Mode
结合 Org-Babel
使用,生成对应的 UML
图,所见即所得。
这里有一个在线体验的网址,有兴趣可以点击链接,前去体验。