�gӭ���R�ЈD�W(w��ng) Ո(q��ng) | ע��(c��)
> >>
��(sh��)��(zh��n)JAVA̓�M�C(j��):JVM�����\���c���܃�(y��u)��(��2��)

���] ��(sh��)��(zh��n)JAVA̓�M�C(j��):JVM�����\���c���܃�(y��u)��(��2��)

���ߣ���һ�Q
�����磺��ӹ��I(y��)����������r(sh��)�g��2018-06-01
�_(k��i)���� ���� �(y��)��(sh��)�� 456
�� �D �r(ji��):¥44.6(5.0��) ���r(ji��)  ¥89.0 ��䛺�ɿ�����(hu��)�T�r(ji��)
����ُ(g��u)��܇ �ղ�
�_(k��i)������ ȫ��(ch��ng)���]
?�½������س���
������Ǖ�����>

��(sh��)��(zh��n)JAVA̓�M�C(j��):JVM�����\���c���܃�(y��u)��(��2��) ���(qu��n)��Ϣ

��(sh��)��(zh��n)JAVA̓�M�C(j��):JVM�����\���c���܃�(y��u)��(��2��) ������ɫ

���ܼ��g(sh��)��ΰl(f��)չ��Java��Ȼ��һ��(g��)��M���������B(t��i)Ȧ���W(xu��)��(x��)Java����ҲԽ��(l��i)Խ����������(sh��)�ˌW(xu��)��(x��)Java̓�M�C(j��)��JVM���r(sh��)����(hu��)����ƿ�i��������ͨ�^(gu��)200����(g��)ʾ��Ԕ��(x��)��BJVM�еĸ��N����(sh��)�����������Ų顢���ܱO(ji��n)�ؼ����܃�(y��u)��������Java��ͻ��ƿ�i��������11������ӆ��汾���wJava 6��Java 10����1��3�½�B��Java̓�M�C(j��)�Ķ��x�����w�ܘ�(g��u)���������Å���(sh��)����4��5�½�B���������յ��㷨�͸��N��������������6�½�B��Java̓�M�C(j��)�����ܱO(ji��n)�غ͹����\�๤������7��Ԕ��(x��)��B�ˌ�(du��)Java�ѵķ��������Ͱ�������8�½�B��Java̓�M�C(j��)��(du��)�ྀ���������nj�(du��)�i��֧�֡���9��10�½�B��Java̓�M�C(j��)�ĺ���—Class�ļ��Y(ji��)��(g��u)���Լ�Java̓�M�C(j��)����b�dϵ�y(t��ng)����11�½�B��Java̓�M�C(j��)�Ĉ�(zh��)��ϵ�y(t��ng)���ֹ�(ji��)�a�����o����ͨ�^(gu��)ASM����M(j��n)���ֹ�(ji��)�aע��İ������������H�m��Java����T��x��߀�m�Ϲ�����Java̓�M�C(j��)֮�ϵ��аl(f��)�ˆT��ܛ���O(sh��)Ӌ(j��)�����ܘ�(g��u)����x��

��(sh��)��(zh��n)JAVA̓�M�C(j��):JVM�����\���c���܃�(y��u)��(��2��) ��(n��i)�ݺ�(ji��n)��

���ܼ��g(sh��)��ΰl(f��)չ��Java��Ȼ��һ��(g��)��M���������B(t��i)Ȧ���W(xu��)��(x��)Java����ҲԽ��(l��i)Խ����������(sh��)�ˌW(xu��)��(x��)Java̓�M�C(j��)��JVM���r(sh��)����(hu��)����ƿ�i��������ͨ�^(gu��)200����(g��)ʾ��Ԕ��(x��)��BJVM�еĸ��N����(sh��)���á������Ų������ܱO(ji��n)�ؼ����܃�(y��u)��������Java��ͻ��ƿ�i��������11������ӆ��汾���wJava 6��Java 10����3�½�B��Java̓�M�C(j��)�Ķ��x�����w�ܘ�(g��u)���������Å���(sh��)����4��5�½�B���������յ��㷨�͸��N��������������6�½�B��Java̓�M�C(j��)�����ܱO(ji��n)�غ͹����\�๤�ߡ���7��Ԕ��(x��)��B�ˌ�(du��)Java�ѵķ��������Ͱ�������8�½�B��Java̓�M�C(j��)��(du��)�ྀ�̣������nj�(du��)�i��֧������9��10�½�B��Java̓�M�C(j��)�ĺ��ĨDClass�ļ��Y(ji��)��(g��u)���Լ�Java̓�M�C(j��)����b�dϵ�y(t��ng)��1�½�B��Java̓�M�C(j��)�Ĉ�(zh��)��ϵ�y(t��ng)���ֹ�(ji��)�a�����o����ͨ�^(gu��)ASM����M(j��n)���ֹ�(ji��)�aע��İ������������H�m��Java����T��x��߀�m�Ϲ�����Java̓�M�C(j��)֮�ϵ��аl(f��)�ˆT��ܛ���O(sh��)Ӌ(j��)�����ܘ�(g��u)����x��

��(sh��)��(zh��n)JAVA̓�M�C(j��):JVM�����\���c���܃�(y��u)��(��2��) Ŀ�

Ŀ�����


��1�¡���̽Java̓�M�C(j��) 1
1.1 ֪��֪�ף�׷��Java�İl(f��)չ�v�� 2
1.1.1 ��Щ����Java̓�M�C(j��)���Z(y��)�Դ󿧂� 2
1.1.2 Java�l(f��)չʷ�ϵ���̱� 2
1.2 ��ƽ�_(t��i)�����ࣺJava̓�M�C(j��)���н� 4
1.2.1 ����Java̓�M�C(j��)��ԭ�� 4
1.2.2 ����Java̓�M�C(j��)�ķN� 5
1.3 һ�п��ҵģ�Java�Z(y��)��Ҏ(gu��)�� 6
1.3.1 �~���Ķ��x 6
1.3.2 �Z(y��)���Ķ��x 7
1.3.3 ��(sh��)��(j��)��͵Ķ��x 8
1.3.4 Java�Z(y��)��Ҏ(gu��)�����Y(ji��) 9
1.4 һ�� (t��ng)�ҵģ�Java̓�M�C(j��)Ҏ(gu��)�� 9
1.5 ��(sh��)�־��a����Ӌ(j��)��C(j��)�����ˮ��� 10
1.5.1 ����(sh��)��Java̓�M�C(j��)�еı�ʾ 10
1.5.2 ���c(di��n)��(sh��)��Java̓�M�C(j��)�еı�ʾ 12
1.6 ���u���񣺾��g���{(di��o)ԇ̓�M�C(j��) 14
1.7 �Y(ji��) 18
��2�¡��J(r��n)�R(sh��)Java̓�M�C(j��)�Ļ����Y(ji��)��(g��u) 19
2.1 �\ȫ���߲��ܳɴ���������Java̓�M�C(j��)�ļܘ�(g��u) 19
2.2 С����(sh��)�ܽ�Q��(w��n)�}���W(xu��)��(hu��)�O(sh��)��Java̓�M�C(j��)�ą���(sh��) 21
2.3 ��(du��)��ȥ�ă�������Java�� 22
2.4 ����(sh��)����{(di��o)�����Java�� 24
2.4.1 �ֲ�׃���� 26
2.4.2 ������(sh��)�� 31
2.4.3 ����(sh��)��(j��)�^(q��) 31
2.4.4 ���Ϸ��� 32
2.5 �ȥ�ă��ˣ��R(sh��)�e�����^(q��) 34
2.6 �Y(ji��) 36
��3�¡�����Java̓�M�C(j��)����(sh��) 37
3.1 һ���\(y��n)�ж����E��ѭ�����ո�ۙ�{(di��o)ԇ����(sh��) 37
3.1.1 ��ۙ��������—�x��̓�M�C(j��)��־ 38
3.1.2 ��d/ж�d�ĸ�ۙ 42
3.1.3 �鿴ϵ�y(t��ng)����(sh��) 45
3.2 ׌�����w����(l��i)���W(xu��)��(x��)�ѵ����Å���(sh��) 45
3.2.1 *��Ѻͳ�ʼ�ѵ��O(sh��)�� 46
3.2.2 ������������ 49
3.2.3 �����̎�� 53
3.3 �e׌������ȱ�ڣ��˽�Ƕу�(n��i)��ą���(sh��)���� 54
3.3.1 �����^(q��)���� 55
3.3.2 ������ 55
3.3.3 ֱ�Ӄ�(n��i)������ 55
3.4 Client��Server���xһ��̓�M�C(j��)�Ĺ���ģʽ 58
3.5 �Y(ji��) 59
��4�¡��������յĸ����c�㷨 60
4.1 ��(n��i)������坍�����J(r��n)�R(sh��)�������� 60
4.2 �坍���ߴ�PK��ӑՓ���õ����������㷨 61
4.2.1 ����Ӌ(j��)��(sh��)����Reference Counting�� 62
4.2.2 ��(bi��o)ӛ�������Mark-Sweep�� 63
4.2.3 ��(f��)���㷨��Copying�� 64
4.2.4 ��(bi��o)ӛ���s����Mark-Compact�� 66
4.2.5 �ִ��㷨��Generational Collecting�� 67
4.2.6 �օ^(q��)�㷨��Region�� 68
4.3 �l(shu��)��������������������|���� 69
4.3.1 ��(du��)��ď�(f��)�� 69
4.3.2 ���úͿ��|���Եď�(qi��ng)�� 71
4.3.3 ܛ����—�ɱ����յ����� 72
4.3.4 ������—�l(f��)�F(xi��n)������ 76
4.3.5 ̓����—��(du��)����ո�ۙ 77
4.4 �������Օr(sh��)��ͣ�D�F(xi��n)��Stop-The-World������(sh��)��(zh��n) 79
4.5 �Y(ji��) 83
��5�¡������ռ����̓�(n��i)����� 84
5.1 һ��һ��һ���£����л����� 85
5.1.1 ������������� 85
5.1.2 ������������ 86
5.2 �˶������󣺲��л����� 86
5.2.1 ������ParNew������ 87
5.2.2 ������ParallelGC������ 88
5.2.3 �����ParallelOldGC������ 89
5.3 һ�Ķ��ö������£�CMS��������JDK 8��֮ǰ�İ汾�� 90
5.3.1 CMS��Ҫ�������E 90
5.3.2 CMS��Ҫ�ą���(sh��) 91
5.3.3 CMS����־���� 93
5.3.4 ���P(gu��n)Class�Ļ��� 94
5.4 δ��(l��i)��������G1��������JDK 9��֮��汾��Ĭ�J(r��n)�������� 95
5.4.1 G1�ă�(n��i)�愝�ֺ���Ҫ�ռ��^(gu��)�� 95
5.4.2 G1��������GC 96
5.4.3 G1�IJ��l(f��)��(bi��o)ӛ���� 97
5.4.4 ��ϻ��� 100
5.4.5 ��Ҫ�r(sh��)��Full GC 102
5.4.6 G1����־ 102
5.4.7 G1���P(gu��n)�ą���(sh��) 106
5.5 ���������P(gu��n)��(du��)���(n��i)�����ͻ��յ�һЩ��(x��)��(ji��)��(w��n)�} 106
5.5.1 ����System.gc() 107
5.5.2 System.gc()ʹ�ò��l(f��)���� 107
5.5.3 ����GCǰ�~���|�l(f��)��������GC 109
5.5.4 ��(du��)��Εr(sh��)�M(j��n)������� 109
5.5.5 ��TLAB�Ϸ��䌦(du��)�� 117
5.5.6 finalize()����(sh��)��(du��)�������յ�Ӱ� 120
5.6 �ع���֪�£����õ�GC����(sh��) 125
5.7 ��(d��ng)�ֲ�����Ӣ�ۣ�������������(du��)Tomcat����Ӱ푵Č�(sh��)�(y��n) 127
5.7.1 ����(sh��)�(y��n)�h(hu��n)�� 127
5.7.2 �������ܜy(c��)ԇ����JMeter 128
5.7.3 ����Web��(y��ng)�÷���(w��)��Tomcat 131
5.7.4 ��(sh��)��(zh��n)����1—��ԇ���л����� 133
5.7.5 ��(sh��)��(zh��n)����2—�U(ku��)���������ϵ�y(t��ng)���� 133
5.7.6 ��(sh��)��(zh��n)����3—�{(di��o)����ʼ�Ѵ�С 134
5.7.7 ��(sh��)��(zh��n)����4—ʹ��ParrellOldGC������ 135
5.7.8 ��(sh��)��(zh��n)����5—ʹ���^С�����GC���� 135
5.7.9 ��(sh��)��(zh��n)����6—�y(c��)ԇParallelOldGC�ı��F(xi��n) 135
5.7.10 ��(sh��)��(zh��n)����7—�y(c��)ԇParNew�������ı��F(xi��n) 136
5.7.11 ��(sh��)��(zh��n)����8—�y(c��)ԇJDK 1.8�ı��F(xi��n) 136
5.7.12 ��(sh��)��(zh��n)����9—ʹ�ø߰汾̓�M�C(j��)�������� 137
5.8 �Y(ji��) 137
��6�¡����ܱO(ji��n)�ع��� 138
6.1 ���Ҹ���Ч��Linux�µ����ܱO(ji��n)�ع��� 139
6.1.1 �@ʾϵ�y(t��ng)���w�YԴʹ����r—top���� 139
6.1.2 �O(ji��n)�؃�(n��i)���CPU—vmstat���� 140
6.1.3 �O(ji��n)��I/O—iostat���� 142
6.1.4 �๦���\����—pidstat���� 143
6.2 ���Ҹ���Ч��Windows�µ����ܱO(ji��n)�ع��� 148
6.2.1 �΄�(w��)������ 148
6.2.2 perfmon���ܱO(ji��n)�ع��� 150
6.2.3 Process Explorer�M(j��n)�̹������� 153
6.2.4 pslist����—Windows��Ҳ�������й��� 155
6.3 ������g(sh��)����JDK���ܱO(ji��n)�ع��� 157
6.3.1 �鿴Java�M(j��n)��—jps���� 158
6.3.2 �鿴̓�M�C(j��)�\(y��n)�Еr(sh��)��Ϣ—jstat���� 159
6.3.3 �鿴̓�M�C(j��)����(sh��)—jinfo���� 162
6.3.4 ��(d��o)���ѵ��ļ�—jmap���� 163
6.3.5 JDK�Ԏ��Ķѷ�������—jhat���� 165
6.3.6 �鿴���̶ї�—jstack���� 168
6.3.7 �h(yu��n)�����C(j��)��Ϣ�ռ�—jstatd���� 171
6.3.8 �๦��������—jcmd���� 173
6.3.9 ���ܽy(t��ng)Ӌ(j��)����—hprof 175
6.3.10 �U(ku��)չjps���� 178
6.4 ��������ۣ��D�λ�̓�M�C(j��)�O(ji��n)�ع���JConsole 178
6.4.1 JConsole�B��Java���� 179
6.4.2 Java����śr 180
6.4.3 ��(n��i)��O(ji��n)�� 180
6.4.4 ���̱O(ji��n)�� 181
6.4.5 ��d��r 183
6.4.6 ̓�M�C(j��)��Ϣ 183
6.5 һĿ��Ȼ����ҕ�����ܱO(ji��n)�ع���Visual VM 184
6.5.1 Visual VM�B�ӑ�(y��ng)�ó��� 185
6.5.2 �O(ji��n)�ؑ�(y��ng)�ó���śr 186
6.5.3 Thread Dump�ͷ��� 187
6.5.4 ���ܷ��� 188
6.5.5 ��(n��i)����շ��� 190
6.5.6 BTrace��B 191
6.6 ��(l��i)��JRockit�ĶY�̓�M�C(j��)�\�๤��M(j��n)ission Control 199
6.6.1 MBean����(w��)�� 199
6.6.2 �w��ӛ�����Flight Recorder�� 201
6.7 �Y(ji��) 204
��7�¡�����Java�� 205
7.1 ��(du��)�Y������ˎ���ҵ���(n��i)�������ԭ�� 206
7.1.1 ����� 206
7.1.2 ֱ�Ӄ�(n��i)����� 206
7.1.3 �^(gu��)�ྀ�̌�(d��o)��OOM 208
7.1.4 ���Å^(q��)��� 210
7.1.5 GCЧ�ʵ��������OOM 211
7.2 �o(w��)̎���ڵ��ַ�����String��̓�M�C(j��)�еČ�(sh��)�F(xi��n) 211
7.2.1 String��(du��)������c(di��n) 211
7.2.2 ���P(gu��n)String�ă�(n��i)��й© 213
7.2.3 ���P(gu��n)String�����ص�λ�� 216
7.3 ̓�M�C(j��)Ҳ�Ѓ�(n��i)�Q�R��ʹ��MAT����Java�� 218
7.3.1 ���R(sh��)MAT 218
7.3.2 �\�Ѻ���� 221
7.3.3 MAT�ѷ����������� 222
7.3.4 ֧���(sh��)��Dominator Tree�� 226
7.3.5 Tomcat��������� 227
7.4 �Y�x�ь�(du��)��MAT��(du��)OQL��֧�� 231
7.4.1 Select�Ӿ� 231
7.4.2 From�Ӿ� 233
7.4.3 Where�Ӿ� 235
7.4.4 ��(n��i)��(du��)���c���� 235
7.5 �����ʵIJ��ң�Visual VM��(du��)OQL��֧�� 240
7.5.1 Visual VM��OQL�����Z(y��)�� 240
7.5.2 ��(n��i)��heap��(du��)�� 241
7.5.3 ��(du��)�󺯔�(sh��) 243
7.5.4 ����/�y(t��ng)Ӌ(j��)����(sh��) 247
7.5.5 ����OQL����Tomcat�� 253
7.6 �Y(ji��) 256
��8�¡��i�c���l(f��) 257
8.1 ��ȫ�����i���ڵ����ɣ��i�Ļ�������͌�(sh��)�F(xi��n) 258
8.1.1 ���⾀�̰�ȫ 258
8.1.2 ��(du��)���^���i 260
8.2 ���⚈��ĸ�(j��ng)��(zh��ng)���i��Java̓�M�C(j��)�еČ�(sh��)�F(xi��n)�̓�(y��u)�� 261
8.2.1 ƫ���i 261
8.2.2 �p����(j��)�i 263
8.2.3 �i��Û 264
8.2.4 �����i 265
8.2.5 �i���� 265
8.3 ��(y��ng)��(du��)����ĸ�(j��ng)��(zh��ng)���i�ڑ�(y��ng)�Ìӵă�(y��u)��˼· 267
8.3.1 �p���i���Еr(sh��)�g 267
8.3.2 �p�i���� 268
8.3.3 �i���x 270
8.3.4 �i�ֻ� 272
8.4 �o(w��)�Є����У��o(w��)�i 274
8.4.1 ����CAS 274
8.4.2 ԭ�Ӳ��� 275
8.4.3 �Œ���LongAdder 278
8.5 ���S�C(j��)׃?y��u)�ɿأ�����Java��(n��i)��ģ�� 281
8.5.1 ԭ���� 281
8.5.2 ������ 283
8.5.3 ��Ҋ(ji��n)�� 285
8.5.4 Happens-Beforeԭ�t 287
8.6 �Y(ji��) 287
��9�¡�Class�ļ��Y(ji��)��(g��u) 288
9.1 ���H��ƽ�_(t��i)��߀�ܿ��Z(y��)�ԣ��Z(y��)�ԟo(w��)�P(gu��n)�� 288
9.2 ̓�M�C(j��)�Ļ�ʯ��Class�ļ� 290
9.2.1 Class�ļ��Ę�(bi��o)־—ħ��(sh��) 291
9.2.2 Class�ļ��İ汾 293
9.2.3 ������г���(sh��)—������ 294
9.2.4 Class���L��(w��n)��(bi��o)ӛ��Access Flag�� 301
9.2.5 ��(d��ng)ǰ�����ͽӿ� 302
9.2.6 Class�ļ����ֶ� 303
9.2.7 Class�ļ��ķ��������Y(ji��)��(g��u) 305
9.2.8 �����Ĉ�(zh��)�����w—Code���� 307
9.2.9 ӛ���̖(h��o)—LineNumberTable���� 308
9.2.10 ����ֲ�׃���ͅ���(sh��)—LocalVariableTable���� 309
9.2.11 �ӿ��ֹ�(ji��)�aУ�(y��n)—StackMapTable���� 309
9.2.12 Code���Կ��Y(ji��) 314
9.2.13 ��������—Exceptions���� 315
9.2.14 �Ì�(sh��)������Class�ķ����Y(ji��)��(g��u) 316
9.2.15 �ҁ�(l��i)������—SourceFile���� 319
9.2.16 ��(qi��ng)��Ą�(d��ng)�B(t��i)�{(di��o)��—BootstrapMethods���� 320
9.2.17 ��(n��i)���—InnerClasses���� 321
9.2.18 ��Ҫ�U����֪ͨ—Deprecated���� 322
9.2.19 Class�ļ����Y(ji��) 323
9.3 �����ֹ�(ji��)�a�����M(j��n)ASM 323
9.3.1 ASM�wϵ�Y(ji��)��(g��u) 323
9.3.2 ASM֮Hello World 325
9.4 �Y(ji��) 326
��10�¡�Class�b�dϵ�y(t��ng) 327
10.1 ��(l��i)
չ�_(k��i)ȫ��

��(sh��)��(zh��n)JAVA̓�M�C(j��):JVM�����\���c���܃�(y��u)��(��2��) ���P(gu��n)�Y��

�� ��(g��)���J(r��n)������⌑���DZ�Ҫͨ���׶������Ҹ��N���Ї�(gu��)����T����Ҫ����(du��)jvm�ĸśr���Ժ��ɶҪ�˽�jvm�@�K�f(shu��)�IJ��e(cu��)�����w�����DZ��Õ��� �� ֮ǰ�ڈD���^����^(gu��)����(n��i)���S������(sh��)�`�ԏ�(qi��ng)�����Iһ���Ԃ����(x��)֮���� �� �v�IJ��e(cu��)�����vԭ�����ɜ\����������Փ����(sh��)�`�� �� ��(n��i)�ݳ䌍(sh��)������������֪�R(sh��)�c(di��n)Ԕ��(x��)�� �� �m�ϳ���(j��)JVM���W(xu��)�ߌW(xu��)��(x��)���󲿷��nj�(sh��)��(zh��n)��(j��ng)�(y��n)�����e(cu��)��һ������*����һ������Ŀ��� �� ��һ�Q ���ĕ��������� ���������������x�� �� ��̓�M�C(j��)���P(gu��n)�IJ��e(cu��)��һ�������������e(cu��)����(n��i)��Ҳ���^��(sh��)�ã��ܝM�� �� ����(du��)ƫ��(sh��)�`������������JVMһ�𿴡� ……

��(sh��)��(zh��n)JAVA̓�M�C(j��):JVM�����\���c���܃�(y��u)��(��2��) ���ߺ�(ji��n)��

���һ�Q 51CTO�ؼs�v������(gu��)���J(r��n)�Cϵ�y(t��ng)���������@��Oracle OCP�J(r��n)�C���L(zh��ng)�ڏ���Javaܛ���_(k��i)�l(f��)��������(du��)Java�����O(sh��)Ӌ(j��)��JVM��������о�����(du��)�O(sh��)Ӌ(j��)ģʽ���˹���������(j��ng)�W(w��ng)�j(lu��)����(sh��)��(j��)�ھ�ȼ��g(sh��)�Н���dȤ���_(k��i)�O(sh��)���ھ��ġ�����\��Java̓�M�C(j��)——���Tƪ����Ӗ(x��n)�n����

��Ʒ�u(p��ng)Փ(0�l)
���o(w��)�u(p��ng)Փ����
�������]
����N
��݋���]
����픲�
�ЈD�W(w��ng)
�ھ��ͷ�