摘要:
在学习 Spring 的时候,我们必须得有个整体性的概念。 这个概念就是: Spring 到底是什么? 官网给了如下的介绍: The Spring Framework provides a comprehensive programming and configuration model for m 阅读全文
摘要:
栈结构 栈,这种数据结构,太重要了。如果学习过算法,就可以了解它的强大了。 栈,就像我们叠起来的盘子,只能对最上面的部分进行操作。对于栈,只有两种操作: 入栈,在上面再加一个盘子 出栈,拿掉最上面的盘子 别小看这两种操作,他可以完成很多复杂的事情,这就是数据结构和算法的魅力。 JVM 的运行是基于栈 阅读全文
摘要:
先来看这张图,对于数据区,存在着线程,进程的概念。程序计数器是每个线程私有的。如果没有多线程的概念,可以直接无视。 程序计数器 程序计数器,也有人叫它 程序寄存器。但是叫做 程序计数器更为精确。 因为我们知道,在计算机也有一种结构叫做 寄存器,它储存容量小,但是速度快,一般用于 CPU 中。 但是我 阅读全文
摘要:
按理说,在介绍完前端编译器之后,我们应该介绍如何让 JVM 去解释运行 这个编译后的 .class 文件。 但是感觉并不是很恰当。 如果把 .class 文件比做新购买的家具,那么如果需要把家具摆放到家里,是不是得先了解房子的结构和布局,然后才能将家具进行正确的摆放。 我们这里介绍的 运行时数据区 阅读全文
摘要:
前端编译的主要作用,是将 我们编写的 .java 文件 编译成 .class 文件,也就是我们常说的 字节码 文件。 字节码 文件,里面包含了我们编写的 .java 代码中的运行逻辑,参数 以及 这些参数在内存中的分配。 前端编译过程 解析与填充符号表 注解处理 分析与字节码生成 总而言之,就是对 阅读全文
摘要:
首先先来说说 方法区 的作用。 方法区 方法区,是用来存放有关 类、方法 信息的一块逻辑上的区域。也就说,人们想规划出一块区域,用来存储类 方法 相关信息。 除此之外,还用来存储常量、静态变量,以及一些代码缓存等数据。 想想,这些数据都有什么特点。 几乎不变;不怎么依赖于对象,独立。 方法区的故事 阅读全文
摘要:
-XX:+PrintFlagsInital 查看所有参数的初始值 -XX:+PrintFlagsFinal 查看所有参数的最终值 -Xms 设置堆的初始值 -Xmx 设置堆的最大值 -Xmn 设置新生代的大小 -XX:NewRatio 新生代与老年代的比例 -XX:SurvivorRatio 设置 阅读全文
摘要:
这一节主要介绍对象创建时,在堆中的一些过程。 回忆下,我们之前说的,什么时候会发生垃圾回收? 除了在一些安全点处也许会发生垃圾回收(只是也许),如果在所需内存不足的情况下,一定会发生垃圾回收。 分配堆空间 首先通过设置参数,把堆空间设置为 20M,其中 新生代 10M,老年代 10M。 参数设置: 阅读全文
摘要:
创建一个对象,不仅仅是找一块内存区域,然后把对象的值赋值进去那么简单。你想想,当我们 new 一个对象出来的时候,我们可以利用反射获取对象的一些信息。可以通过对象调用其中的一些方法。所以,在内存中,对象不仅仅包含了对象值那么简单,它还包含了更多的信息。 这些信息保存在一个名为 对象头 的结构中。 对 阅读全文
摘要:
堆的结构是基于分代理论(垃圾回收)的,这种结构划分,是为了更好地进行垃圾回收。 我们将堆分为老年代、新生代。 永久代、元空间、堆这几个概念一直比较混乱。但是看到上图,堆的定义只包含 新生代 和 老年代。 这一点我们在实际设置 JVM 的参数的时候,你会发现,设置的空间的确只包含 新生代 和 老年代。 阅读全文