java虚拟机

JVM内存区域

程序计数器:线程私有,当前线程所执行的字节码的行号指示器
虚拟机栈:线程私有,每个方法在执行时都会创建一个栈帧,存储局部变量表等信息,如果线程请求的栈深度大于虚拟机所允许的深度,就会抛出StackOverflowErro(while(true)count++;)
本地方法栈:线程私有
java堆:线程共享,存放对象实例,是内存中最大的一块,也是垃圾回收的主要区域
方法区:线程共享,存放加载的类信息、常量、静态变量

判断对象是否存活?

1.引用计数算法:给对象添加引用计数器,引用该对象,计数器加1,引用失效,计数器减1。计数器为0时,这个对象就能被回收了。会出现对象之间相互循环引用的问题。
2.可达性分析算法:通过GC roots对象作为起始点,从这些节点向下搜索,如果一个对象到GC roots没有任何引用链时,则说明该对象可以回收。

有哪些GC ROOTS

1.虚拟机栈(栈帧中的本地变量表)中引用的对象
2.方法区类静态属性引用的对象
3.方法区中常量引用的对象
4.本地方法栈中(native方法)引用的对象

JVM垃圾回收算法?

标记-清除算法:标记需要回收的对象,标记完成后统一回收,清除后会产生大量内存碎片
复制算法:把内存分为大小相等的两块,当一块的的内存用完了,就把还存活的对象复制到另一块上,再把内存清掉,现在一般用这种算法来回收新生代
标记-整理算法:标记需要回收的对象,然后让存活的对象向一端移动,再把内存清掉。
分带收集算法:把内存分为新生代和老年代,因为大部分对象只存活一小段时间,新生代采用复制算法,把内存分为三块,eden空间和两个survivor空间,默认比例是8:1:1,垃圾回收一次后,存活的对象到另一块空着的survivor空间

JVM里面的垃圾回收器?

针对新生代的垃圾回收器有三个:serial、parallel new、parallel scavenge。这三个都采用的是标记-复制算法,其中serial是单线程的,parallel new可以看成是serial的多线程版本。parallel scavenge更加注重吞吐率。
针对老年代的垃圾回收器也有三个:serial old、parallel old以及cms。
因为在垃圾回收时会暂停掉所有的工作线程,那cms是一种最短停顿时间为目标的回收器,它基于标记-清除算法实现,并且是并发的,他工作的四个步骤是:初次标记、并发标记、重新标记、并发清除。初次标记是关联GC roors对象,所以虽然这个阶段需要暂停工作线程,但是速度很快。并发标记是查找GC roots对象的应用链,是并发进行的,重新标记是标记并发标记期间,工作进程运作导致的标记变动,这一个阶段也是需要stop the world。
G1是一个横跨新生代和老年代的垃圾回收器,他将堆分为多个区域,每个区域都可以充当eden、survivor区或者老年代中的一个,它采用标记-压缩算法,在进行选择回收区域时,他会优先回收死亡对象较多的区域。

类加载机制?

加载
链接
初始化
https://time.geekbang.org/column/article/11523

Static final 关键字 类加载机制初始化顺序?
tomcat 类加载机制?osgi类加载机制?
jvm性能调优

java虚拟机扫盲文相关推荐

  1. mysql种编译码写在哪_深入理解Java虚拟机(程序编译与代码优化)

    对于性能和效率的追求一直是程序开发中永恒不变的宗旨,除了我们自己在编码过程中要充分考虑代码的性能和效率,虚拟机在编译阶段也会对代码进行优化.本文就从虚拟机层面来看看虚拟机对我们所编写的代码采用了哪些优 ...

  2. 《深入理解Java虚拟机》(第二版)学习3:垃圾收集器

    垃圾收集器 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现. 我们这里讨论的收集器主要是基于JDK 1.7 Update 14之后的 Hotspot VM . Serial 收 ...

  3. java虚拟机规范-加载、链接与初始化

    前言 java虚拟机是java跨平台的基石,本文的描述以jdk7.0为准,其他版本可能会有一些微调.java代码本身并不能为jvm识别,实际上在jvm中的表现形式为Class对象,一个java类从字节 ...

  4. java 内存溢出的分类_【深入理解Java虚拟机】读后感:JVM内存划分与内存溢出小结...

    扫码关注公众号:Java 技术驿站 发送:vip 将链接复制到本浏览器,永久解锁本站全部文章 [公众号:Java 技术驿站] [加作者微信交流技术,拉技术群] # JVM内存划分与内存溢出小结 # 1 ...

  5. java虚拟机教程图解_深入拆解JAVA虚拟机学习教程

    搞JAVA的深入下去java虚拟机是必须掌握的知识,最近发现个不错的视频教程,学习了几篇讲得非常不错,推荐给大家.废话不多说,大看直接看目录吧. PS:主讲人是Oracle 高级研究员,计算机博士 郑 ...

  6. eclipse无法创建java虚拟机_手把手:Java内存泄漏分析Memory Analyzer Tool

    点击上方"IT牧场",选择"设为星标"点击上方"IT牧场",选择"设为星标"技术干货每日送达 阅读文本大概需要3分钟. ...

  7. java虚拟机jvm GC介绍

    在虚拟机中,释放那些不再被使用的对象所占用空间的的过程称作垃圾回收,简称GC. 垃圾回收的三个难题: 如何确定哪些对象不再被使用? 什么时候进行回收? 如何回收? 如何确定对象无用 引用计数算法 引用 ...

  8. JVM 垃圾收集器 学习笔记(《深入理解java虚拟机》之六 垃圾收集)

    目录 新生代收集器 Serial收集器 ParNew收集器 Parallel Scavenge收集器 老年代收集器 Serial Old收集器 Parallel Old收集器 CMS收集器 Remov ...

  9. Java虚拟机(一)结构原理与运行时数据区域

    前言 本来计划要写Android内存优化的,觉得有必要在此之前介绍一下Java虚拟机的相关知识,Java虚拟机也并不是三言两语能够介绍完的,因此开了Java虚拟机系列,这一篇文章我们来学习Java虚拟 ...

  10. Java虚拟机(JVM)面试题(2022年总结最全面的面试题!!!)

    大家好啊,我是小于哥,Java虚拟无论是在年前面试还是在年后的金三银四面试都是必问的,比如: Java1.8和1.7内存模型有什么差距? 堆栈的区别是什么? 深拷贝和浅拷贝 Java会存在内存泄漏吗? ...

最新文章

  1. 【opencv】(1) 基础操作:图像视频读取、图像截取、颜色通道
  2. 计算机丢失filter.dll,AxCoFilter.dll
  3. python语言的实验心得体会_国产编程语言木兰被质疑换皮Python:当事人承认夸大、道歉...
  4. mysal向一个无法连接的网络尝试了一个套接字操作 0.0.3.235_第十二章 Java网络编程(3)——套接字(上)...
  5. angularJs跨域
  6. linux 文件系统管理
  7. python壁纸数据抓取_python 多线程爬取壁纸网站的示例
  8. 解决问题:swiper动态加载图片后无法滑动
  9. 双摄像头另一个有什么用_手机双摄像头为什么有前后和后双两种?各有什么用?...
  10. C语言可变参数va_list
  11. 邮箱发送附件,附件变成了bin文件
  12. 【动手学深度学习】(task123)注意力机制剖析
  13. VMware Workstation虚拟机备份及磁盘空间回收
  14. mask-image实现聚光灯效果
  15. 几种负荷预测方法及其应用
  16. java学习之服务器第28天( --jsp--三个指令--六个动作标签--PageContext域--EL表达式--)
  17. Jarvis OJ Chopper
  18. CNVD-2020-62853 360天擎终端安全管理系统越权访问漏洞复现
  19. numpy.mat和numpy.matrix的区别
  20. Android获取当前手机的联网方式的总结

热门文章

  1. visio2016 数据库模型图_越来越火的图数据库究竟是什么?
  2. 非负数 正则表达式
  3. 儿童php钢板使用流程,8字钢板半骺板阻滞术治疗儿童下肢成角畸形
  4. phpcms搜索功能实现
  5. rtthread spiflash (w25q64)
  6. 设置Win10防火墙规则,使得局域网能访问此电脑的Tomcat服务器
  7. 手把手教你U盘装Raid系统
  8. smartSVN 新建仓库
  9. 明星隐私倒卖链:只要150 你对朱一龙行踪比他妈还了解
  10. 2020CCPC长春站第一场区域赛打铁记