JVM探究

jvm的位置:  硬件体系---------操作系统之上---------jvm

java---classfile------类加载器-----------(运行数据区)------方法区   Java栈  本地方法栈   堆     程序计数器

--     本地方法接口   本地库-------执行引擎

 

 JVM99  就是调堆     方法区是特殊的堆

 

类加载器   :加载class文件     

双亲委派机制  :安全      APP---EXC----BOOT    直到根   rt.jar

 

 

 class    not   found~~~    null:java   调用不到   因为C写的  

 CC++--=java     指针  内存管理

 

沙箱安全机制:     沙箱---- 签名--域(root)--

                                数字签名--证书   

native    说明  Java的范围达不到了  回去调用底层C语言  本地接口  会进入本地接口

加载本地方法加载JNI         PC寄存器  私有的      

方法区:  静态变量  常量       class   final   static   常量池

栈:数据结构       先进后出     

队列:先进先出    (FIFO)      栈内存    主管程序的运行,生命周期和线程同步

           线程结束,栈就over 

栈:  8大基本类型  +引用对象+  实例的方法

程序正在执行的方法    在栈顶     StackOverflower

 

三种JVM :sun   hotstop         BEA  jockit                       IBM   J9

 

堆  heap   一个jvm只有一个堆内存   

类加载器读取文件后,放什么东西到堆里  ::;;保存引用类型的真实对象

三个区域:新生区(新生区    幸存区0区   幸存1区 )  老年代      持久区

gc垃圾回收主要  伊甸园区和老年区       永久存储区 ---------元空间

 

新生区:  诞生   成长  甚至死亡    所有对象都是伊甸园区 new出来

经过研究99% 对象都是临时对象      oom错

 

永久区:   1.6   常量在方法区          1.7   常量池在堆    常量池在元空间  无永久代       

存储java运行化境和类信息       关闭虚拟机就可以释放内存

 

 默认情况下    总内存电脑的1/4    初始化内存  1/64

 

MAT  JPOfiiler   

 分析dump文件    快速定位内存问题

 

GC :  新生代   幸存区   老年区

GC两种类: 轻GC  重GC      

 GC的算法     标记清除     标记整理    复制算法   引用计数法

好:复制没有碎片         坏: 浪费空间

适用:对象存活较低

标记清除:   扫描对象    进行标记       对没有标记的清除           

两次扫描  浪费时间  产生内存碎片

标记压缩: 防止内存碎片产生   多了一个移动的过程

 

内存效率:  复制------标记清除-------标记压缩(时间复杂度)

内存整齐度:复制=标记压缩》标记清除

内存利用率:标记压缩=标记清除》复制算法

没有最好的算法   只有最合适的算法

所以分代:     年轻代  复制算法      存活率低

                         老年代   标记清除+标记压缩混合

                          

posted @ 2022-03-21 09:33  李文浩learning  阅读(38)  评论(0)    收藏  举报