概述
jvm即java虚拟机
java代码经过编译生成字节码,字节码通过类加载器,到达工作数据区,其包含程序计数器、java虚拟机栈、本地方法栈、堆、方法区,数据区再连接执行引擎以及连接本地方法接口,接口连接本地方法库。
其中数据区可按照线程是否私有分为
线程私有:
程序计数器:记录当前线程字节码的执行位置,在多线程情况下就可以通过程序计数器在线程切换后恢复到正确的执行位置
java虚拟机栈:方法的入栈出栈就是在这里执行的,每个线程的方法在执行的过程就会创建一个栈帧,存储局部变量表、方法出口等信息,出入栈代表方法执行结束和开始。
本地方法栈:是为了执行本地方法而创建的栈。
线程共享:
堆:gc垃圾回收的主要场所,用于存储创建的对象。
方法区:用于存储已被虚拟机加载的类信息、静态变量、常量等信息。
hotspot虚拟机
对象的创建
虚拟机遇到new这个指令的时候,会到方法区的常量池看看是否已经加载过这个类信息了,如果未加载,则进行类的加载、解析、初始化,然后为对象在堆上分配一个空间然后初始化。
当方法栈中调用方法,需要引用对象时,通过指针指向堆中的对象地址。
判断对象是否已经“死亡”
可达性分析
是一颗树的结构,通过gcroot这个根节点,向下搜索走过的路径,当一个对象无法与root节点相联系的时候,说明这个对象已经“死亡”,可以在下一次gc中回收。
GC
新生代(包含大比例的伊甸园区和小比例的两个幸存者区)
算法:标志清除算法,复制算法
标志清除算法:就是可以gc回收的对象做上标志,然后清除
复制算法:把可用内存一次只使用一半,当一半使用完了,复制存活的对象到另一半,然后对原先的一半进行清空。好处是不会产生碎片。
老年代
当新生代中gc未能回收的对象就来到老年代,强GC
算法:标记整理算法
通过对可gc回收的对象做标记,再一次性进行回收,然后把存活的对象往一端移动。
最后
以上就是聪明蜡烛为你收集整理的jvm总结的全部内容,希望文章能够帮你解决jvm总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复