Java 垃圾回收机制
前言
之前我们介绍了 JVM 运行时内存是怎么分配的,其中方法区和堆是线程共享的,这里的对象如果不需要使用了,需要释放掉。
但我们很少像 C/C++ 一样去自己管理,释放内存,这其中就要归功于 Java GC ,它在背后默默的工作着。
虽然 Java GC 在背后默默的工作着,但是我们一直都不了解它,今天来看看它是怎么工作的,这样出现问题了才有应对之法。
之前我们介绍了 JVM 运行时内存是怎么分配的,其中方法区和堆是线程共享的,这里的对象如果不需要使用了,需要释放掉。
但我们很少像 C/C++ 一样去自己管理,释放内存,这其中就要归功于 Java GC ,它在背后默默的工作着。
虽然 Java GC 在背后默默的工作着,但是我们一直都不了解它,今天来看看它是怎么工作的,这样出现问题了才有应对之法。
随着 GitHub 的流行,越来越多人开始使用 Git , Git 的强大在于我们可以随时随地的创建分支。
随时随地创建分支,给我带来了极大的方便,但同时,分支太多管理起来也是非常头疼。
Git 支持多人协作,如果没有一个规范的话,随着时间的变化,将会越来越难以管理。
这时 Git Flow 出现了,这个分支模型,为我们管理 Git 分支提供了一个模型,用来管理 Git 分支,有效的减少分支混乱不堪的情况。
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 图,所见即所得。
这里有一个在线体验的网址,有兴趣可以点击链接,前去体验。
Photo by Luigi Liccardo on Unsplash
引用一段百度百科的介绍。
智齿也称智慧齿、是人类的第三磨牙,随着遗传基因的不同智齿一般会在 16-30 岁之间长出,也是人一生中最后长出的牙齿,所以它最靠近喉咙,因为此时期的人们心智比较成熟而得名。
UML(Unified Modeling Language)统一建模语言,对于程序员来说接触比较多的就是类图了。在学习 UML 的时候没有好好学,导致后面许多别人画的类图看不懂,一些优秀的资料也看不懂,看到有 UML 的都会下意识的跳过,这样下去不行,所以回来学习 UML 相关知识。
之前总结过 Docker 的使用,讲解了 Docker 的安装、相关概念以及基本使用。里面介绍的都是如何使用别人制作好的镜像,显然是不能满足我们的需要。接下来就来讲讲私人订制自己的镜像。
从名字中可以看出 RxLifecycle 和生命周期有关。也的确如此, RxLifecycle 通过监听生命周期的变化,来解决 RxJava 内存泄漏的问题。
hugo 是一个静态网站生成器,通过 hugo 可以快速生成属于你的静态网站。
|
|
|
|
在Hugo Themes中选择一个喜欢的主题,下载到新 themes 目录下
|
|
在网站根目录下的 config.toml 中把 theme 改成 gohugo-theme-ananke