![](https://img-blog.csdnimg.cn/20190419142805173.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java超神之路
本专栏会从Java基础讲起,一步一步讲述一个java程序员怎么成长起来,怎么从掌握小小知识点开始,如何成为Java技术专家。
小山沟里的程序猿
向一个城墙发起冲锋!
展开
-
深入理解JAVA虚拟机学习笔记06—再议垃圾回收机制
Java 9引入了很多新的特性,除了闪瞎眼的Module System和REPL,最重要的变化我认为是默认GC(Garbage Collector)修改为新一代更复杂、更全面、性能更好的G1(Garbage-First)。JDK的维护者在GC选择上一直是比较保守的,G1从JDK 1.6时代就开始进入开发者的视野,直到今天正式成为Hotspot的默认GC,也是走了很长的路。 本文将主要讲解GC调优...原创 2019-07-31 14:53:58 · 352 阅读 · 0 评论 -
深入理解JAVA虚拟机学习笔记06——七种垃圾收集器介绍和对比
本来这一篇应该是和大家分享以下HotSpot的算法实现的,但是有部分内容存在一些疑问,还需进一步研究一下,今天就简单介绍...原创 2019-07-30 23:09:29 · 304 阅读 · 0 评论 -
深入理解JAVA虚拟机学习笔记05——垃圾收集算法
话不多说,直接上内容,书中介绍了四种算法。 一、标记-清除算法 这是最基础的算法,后续的算法都是在此算法基础上做出的改进。 该算法包括两个过程: 标记——将对象回收状态进行标记,这个在以前的笔记中已经做了介绍,这里不再赘述。 清除——回收的时候直接将标记为可回收的对象清除。 缺点: (1)效率问题:标记和清除两个过程的效率都不高; (2)空间问题:从图中可以看出,回收之后的内存...原创 2019-07-30 16:07:20 · 292 阅读 · 0 评论 -
深入理解JAVA虚拟机学习笔记04——垃圾收集器概述
今天先简单了解一下虚拟机的垃圾收集器。 前面已经介绍过了,程序计数器,虚拟机栈和本地方法栈是属于线程私有区域,这三个区域分配和回收都是确定的,方法和线程结束后,内存自认而然就回收了。 而Java堆和方法作为公共区域回收则比较复杂,垃圾收集器所关注也是这两个部分的内存。 但是如何判断哪些对象应该被回收呢? 比较简单的是引用计数算法:给对象增加一个计数器,多一个地方引用此对象,该对象的计数器就...原创 2019-07-29 20:23:24 · 274 阅读 · 0 评论 -
深入理解JAVA虚拟机学习笔记03——OutOfMemoryError异常
为了方便制造溢出,将JAVA堆的大小调整为10M。 本机用的是IntelliJ IDEA作为开发工具,进入到IDEA的安装目录,如D:\tools\IntelliJ IDEA 2017.1.4\bin,打开idea64.exe.vmoptions文件(32位的请打开idea.exe.vmoptions),把-Xms(最大堆内存)和-Xmx(初始化对内存大小)都设置成10M,书上说设置成一样可避免...原创 2019-07-29 19:54:32 · 268 阅读 · 0 评论 -
深入理解JAVA虚拟机学习笔记02——内存中对象的创建与访问
有了上一篇的基础,这一篇我们就来分析一下,对象的创建和访问。 以下面两段代码为例,包含两个类,一个是用来和大家打招呼的具体业务类Main.java。 另一个是用来格式化时间的工具类Utils。 首先明确一下,当前程序是在windows系统下进行的,JDK使用的是1.8。这次我们不使用开发工具,而是直接敲命令。 首先,我们要做的是编译Java文件,因为现在文件还在硬盘上,只有通过编译...原创 2019-07-28 23:23:19 · 233 阅读 · 0 评论 -
深入理解JAVA虚拟机学习笔记01——内存
Java虚拟机在执行Java程序的过程中会在内存空间中分配出一块区域,用于程序的运行。 虚拟机又会把这块所管理的内存划分为若干个不同的数据区域:虚拟机栈,本地方法区,程序计数器,堆,方法区。 左侧三个为线程私有,右侧两个为线程共享的区域。 1. 程序计数器:当前线程所执行的字节码的行号指示器。 字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支,循环,跳转...原创 2019-07-28 22:25:59 · 235 阅读 · 0 评论 -
搞定Java垃圾回收,就这一篇!
之前上学的时候有这个一个梗,说在食堂里吃饭,吃完把餐盘端走清理的,是 C++ 程序员,吃完直接就走的,是 Java 程序员。确实,在 Java 的世界里,似乎我们不用对垃圾回收那么的专注,很多初学者不懂 GC,也依然能写出一个能用甚至还不错的程序或系统。 但其实这并不代表 Java 的 GC 就不重要。相反,它是那么的重要和复杂,以至于出了问题,那些初学者除了打开 GC 日志,看...原创 2019-07-19 23:18:13 · 363 阅读 · 0 评论