JVM

JVM体系结构

JVM体系结构.png

类加载器

作用:加载class文件
分类:

  • 虚拟机自带的加载器
  • 启动类(根)加载器
  • 扩展类加载器
  • 应用程序加载器
类加载器.png

双亲委派机制

  1. 类加载器接收到类的加载请求
  2. 将这个请求向上委托给父类加载器去完成,一直向上委托,直到启动类加载器
  3. 启动类加载器检查是否能加载当前这个类,能加载就结束,使用当前的加载器,否则抛出异常,通知子类进行加载
  4. 重复步骤3

案例:自己创建一个java.lang包,并且在里面创建一个String类,重写toString方法,调用,会出现错误,因为类加载器根据双亲委派机制会找到扩展类加载器加载,而自己写的应用用应用程序加载器加载

沙箱安全机制

字节码校验器
类加载器
存储控制器
安全管理器
安全软件包

native关键字

  • 凡是带了native关键字的说明Java的作用范围达不到了回去调了底层C的库
  • 首先会进入本地方法栈
  • 然后通过本地方法接口JNI(拓展java的使用,融合不同的编程语言为Java所用)
  • 在内存区域专门开辟一块标记区域Native Method Stack登记native方法
  • 在最终执行的时候,通过JNI加载本地方法库中的方法

PC寄存器

程序计数器
每一个线程都有一个程序计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码(用来存储指向下一条指令的地址,即将要执行的指令代码)在执行引擎读取下一条指令,是一个非常小的空间,可以忽略不计

方法区

方法区是被所有线程共享,所有字段和方法字节码以及一些特殊的方法如构造函数接口代码也在此定义,简单说所有的定义的方法的信息都存在此区域,此区域属于共享空间。
静态变量、常量、类信息(构造函数,接口定义)运行时的常量池都存在此区域,但是实例变量存在堆内存中,与该区域无关

main方法为什么先执行,最后结束?

Java中每执行一个方法都会将其压入栈内,方法执行结束,将方法弹出,在程序运行时首先会将main方法压入栈内,然后压入其它方法,其它方法执行结束依次弹出,最后弹出main方法,如果我们此时有两个方法A和B,在A中调用B方法,在B中调用A方法,这样在程序运行过程中会出现,A和B一直压入栈,而不出栈,最终导致栈溢出。

调节堆的初始内存和总内存 -Xms1024m -Xmx1024m


堆.png

元空间:逻辑上存在,物理上不存在

GC垃圾回收

两种回收方式

  • 轻GC (针对新生区)
  • 重GC(full GC 针对老年区)
引用计数法

给每个对象分配一个计数器,用于记录对象的使用次数,假如说一个对象的使用次数是0,在进行GC垃圾回收的时候就对其进行清除。


引用计数法.png
复制算法

谁空谁是to,在进行一次GC垃圾回收时,Eden 区存活的将进入幸存区的to区,如果此时from区中存在存活对象,则复制到to区,此时,from区为空,因此to区变成了from区,from区变成了to区。经过GC后必然保证了Eden和to区为空。当对象经历了15次form和to区之间的交换后还存活,则将进入老年区,15可以更改 -XX:MaxTenuringThreshold=5

复制算法.png

好处:没有内存碎片
坏处:浪费了内存空间,多了一半的空间永远是空的(to区)

最佳使用场景:对象存活度较低的时候

标记清除算法

回收时对存活的对象进行标记,清除时对没有标记的对象进行清除


标记清除.png

优点:

  • 不需要额外的空间

缺点:

  • 两次扫描,浪费时间
  • 产生内存碎片
标记整理(标记压缩)

防止内存碎片,对内存碎片进行整理


标记整理.png
标记清除压缩

先进性标记清除几次,产生较多的内存碎片,在进行一次标记整理

总结
  • 内存效率(时间复杂度):复制算法>标记清除算法>标记整理算法
  • 内存整齐度:复制算法=标记压缩算法>标记清除算法
  • 内存利用率:标记压缩算法=标记清除算法>复制算法

新生区,存活率低,适用于复制算法
老年区,适用于标记清除压缩算法

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容