Skip to content

Commit 6e49fa5

Browse files
committed
fix[sql]:添加sql文件
1 parent db7b12d commit 6e49fa5

File tree

95 files changed

+1020
-345
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

95 files changed

+1020
-345
lines changed

dbblog-backend/db/dbblog.sql

Lines changed: 178 additions & 179 deletions
Large diffs are not rendered by default.

dbblog-backend/db/dbblog_article.sql

Lines changed: 607 additions & 0 deletions
Large diffs are not rendered by default.

dbblog-backend/db/dbblog_book.sql

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
INSERT INTO dbblog.book_note (id, title, description, author, content, content_format, read_num, comment_num, like_num, cover, book_id, chapter, create_time, update_time, recommend, category_id, publish, cover_type, top) VALUES (1, 'Java虚拟机01——Java内存数据区域和内存溢出异常', 'Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁.', 'Bobbi', '# 运行时数据区域
2+
> Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范(Java SE 7版)》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域,如下图所示:
3+
我们可以将上面的数据区域分为线程独有、线程共享及其他三大区域:
4+
## 1.1. 线程独有的数据区域
5+
### 1. 程序计数器(Program Counter Register)
6+
1. 当前线程所执行的字节码的行号指示器。
7+
2. 用于选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复需要依赖这个计数
8+
9+
### 2. 虚拟机栈(Java Stack)
10+
位于线程私有的内存中,生命周期与线程相同。
11+
描述了Java方法执行的内存模型。
12+
方法执行时使用栈帧(Stack Frame)来存储局部变量表、操作数栈、动态链接、方法出口等信息。
13+
如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常。
14+
如果虚拟机栈可以动态扩展,如果扩展时无法申请到足够的内存,就会抛出OutOfMemoryError异常。
15+
### 3. 本地方法栈(Native Method Stack)
16+
与虚拟机栈相类似,区域在于本地方法栈为虚拟机使用到的Native方法服务。
17+
可以由虚拟机设计者自己实现。
18+
本地方法栈区域也会抛出==StackOverflowError==和==OutOfMemoryError==异常
19+
## 1.2. 线程共享的数据区域
20+
Java堆(Heap)
21+
是Java虚拟机所管理内存中最大的一块,在虚拟机启动时创建。
22+
在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配。随着JIT编译器的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术导致某些对象并没有分配在堆上。
23+
Java GC工作的主要区域。现代收集器基本都采用分代收集算法,所以Java堆中还可以细分为新生代和老年代;再细致一点的有Eden空间、From Survivor空间、To Survivor空间等。
24+
如果在堆中没有内存完成实例分配,并且堆也无法再扩展时,将会抛出==OutOfMemoryError==异常。
25+
方法区(Method Area)
26+
用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
27+
它有一个别名叫做Non-Heap(非堆),目的应该是与Java堆区分开来。
28+
HotSpot虚拟机选择把GC分代收集扩展至方法区,即使用永久代来实现方法区,因此也有人将此区域称为“永久代”;JDK 1.7的HotSpot中,已经把原本放在永久代的字符串常量池移出,并逐步改为采用Native Memory来实现方法区的规划。
29+
根据Java虚拟机规范的规定,当方法区无法满足内存分配需求时,将抛出==OutOfMemoryError==异常。
30+
运行时常量池(Runtime Constant Pool)
31+
运行时常量池是方法区的一部分。
32+
Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池(Constant Pool Table),用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。
33+
当常量池无法再申请到内存时会抛出==OutOfMemoryError==异常。
34+
## 1.3. 其他区域
35+
直接内存(Direct Memory)
36+
直接内存并不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域。
37+
这部分内存也可能导致OutOfMemoryError异常出现。
38+
', '<h1 id="-">运行时数据区域</h1>
39+
<blockquote>
40+
<p>Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范(Java SE 7版)》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域,如下图所示:
41+
我们可以将上面的数据区域分为线程独有、线程共享及其他三大区域:</p>
42+
</blockquote>
43+
<h2 id="1-1-">1.1. 线程独有的数据区域</h2>
44+
<h3 id="1-program-counter-register-">1. 程序计数器(Program Counter Register)</h3>
45+
<ol>
46+
<li>当前线程所执行的字节码的行号指示器。</li>
47+
<li>用于选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复需要依赖这个计数</li>
48+
</ol>
49+
<h3 id="2-java-stack-">2. 虚拟机栈(Java Stack)</h3>
50+
<p>位于线程私有的内存中,生命周期与线程相同。
51+
描述了Java方法执行的内存模型。
52+
方法执行时使用栈帧(Stack Frame)来存储局部变量表、操作数栈、动态链接、方法出口等信息。
53+
如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常。
54+
如果虚拟机栈可以动态扩展,如果扩展时无法申请到足够的内存,就会抛出OutOfMemoryError异常。</p>
55+
<h3 id="3-native-method-stack-">3. 本地方法栈(Native Method Stack)</h3>
56+
<p>与虚拟机栈相类似,区域在于本地方法栈为虚拟机使用到的Native方法服务。
57+
可以由虚拟机设计者自己实现。
58+
本地方法栈区域也会抛出==StackOverflowError==和==OutOfMemoryError==异常</p>
59+
<h2 id="1-2-">1.2. 线程共享的数据区域</h2>
60+
<p>Java堆(Heap)
61+
是Java虚拟机所管理内存中最大的一块,在虚拟机启动时创建。
62+
在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配。随着JIT编译器的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术导致某些对象并没有分配在堆上。
63+
Java GC工作的主要区域。现代收集器基本都采用分代收集算法,所以Java堆中还可以细分为新生代和老年代;再细致一点的有Eden空间、From Survivor空间、To Survivor空间等。
64+
如果在堆中没有内存完成实例分配,并且堆也无法再扩展时,将会抛出==OutOfMemoryError==异常。
65+
方法区(Method Area)
66+
用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
67+
它有一个别名叫做Non-Heap(非堆),目的应该是与Java堆区分开来。
68+
HotSpot虚拟机选择把GC分代收集扩展至方法区,即使用永久代来实现方法区,因此也有人将此区域称为“永久代”;JDK 1.7的HotSpot中,已经把原本放在永久代的字符串常量池移出,并逐步改为采用Native Memory来实现方法区的规划。
69+
根据Java虚拟机规范的规定,当方法区无法满足内存分配需求时,将抛出==OutOfMemoryError==异常。
70+
运行时常量池(Runtime Constant Pool)
71+
运行时常量池是方法区的一部分。
72+
Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息是常量池(Constant Pool Table),用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后进入方法区的运行时常量池中存放。
73+
当常量池无法再申请到内存时会抛出==OutOfMemoryError==异常。</p>
74+
<h2 id="1-3-">1.3. 其他区域</h2>
75+
<p>直接内存(Direct Memory)
76+
直接内存并不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域。
77+
这部分内存也可能导致OutOfMemoryError异常出现。</p>
78+
', 11, 0, 1, null, 1, '第2章 Java内存区域与内存溢出异常', '2019-03-09 17:11:05', '2019-03-04 17:51:15', 1, '4,5,6', 1, 2, null);
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
INSERT INTO dbblog.category (id, name, type, rank, parent_id) VALUES (1, '漫谈', 0, 0, -1);
2+
INSERT INTO dbblog.category (id, name, type, rank, parent_id) VALUES (2, '本站相关', 0, 1, 1);
3+
INSERT INTO dbblog.category (id, name, type, rank, parent_id) VALUES (3, '关于', 0, 2, 2);
4+
INSERT INTO dbblog.category (id, name, type, rank, parent_id) VALUES (4, '后端', 1, 0, -1);
5+
INSERT INTO dbblog.category (id, name, type, rank, parent_id) VALUES (5, 'Java进阶', 1, 1, 4);
6+
INSERT INTO dbblog.category (id, name, type, rank, parent_id) VALUES (6, 'JVM', 1, 2, 5);
7+
INSERT INTO dbblog.category (id, name, type, rank, parent_id) VALUES (9, '后端', 0, 0, -1);
8+
INSERT INTO dbblog.category (id, name, type, rank, parent_id) VALUES (11, 'Java基础', 0, 1, 9);
9+
INSERT INTO dbblog.category (id, name, type, rank, parent_id) VALUES (12, '面试', 0, 2, 11);
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
INSERT INTO dbblog.recommend (id, link_id, type, order_num, title, top) VALUES (3, 1, 0, 1, '关于本站和博主', 1);
2+
INSERT INTO dbblog.recommend (id, link_id, type, order_num, title, top) VALUES (4, 1, 2, 2, 'Java虚拟机01——Java内存数据区域和内存溢出异常', 0);

0 commit comments

Comments
 (0)