JVM 是在操作系统上的一个平台,与操作系统间有个装换器,将字节码文件转换成对应平台的机器码,字节码文件从编译器编译.java文件产生。

JVM的结构 栈(存放的就是方法的引用,局部变量,方法体)、堆(常量,方法的实例)、方法区(常量池、静态方法区)、程序计数器、本地方方法栈(不受虚拟机限制的本地方法栈区)

有一张图挺详细的

https://blog.csdn.net/Marvel__Dead/article/details/69220153?locationNum=5&fps=1

用户编写的java文件通过jvm的类加载器加载进内存

编译优化的技术

方法内联,去除方法调用成本,

冗余访问消除

复写传播

无用代码消除

公共子表达式消除,没必要重复计算公共子表达式的值

数组边界检查消除

逃逸分析,分析对象的动态作用域,一个对象定以后,被外部方法调用,称为方法逃逸,被其他线程访问到,称为线程逃逸 栈上分配 同步消除 标量替换

类加载器:

bootstrap(根类加载器)加载JVM自身类

extension(扩展类加载器)加载lib下的jar包

system(系统类加载器)加载用户编写的java文件

JVM加载类是按需加载 使用双亲委派模式

双亲委派模式:

当某个类加载器收到类加载的请求时不会自己直接加载 而是先去找父类加载器 当父类加载器还有父类时一直向上请求 直到根节点根类加载器;然后向下返回 当父类加载器能加载时 成功返回,不能加载就交由子类尝试加载

类加载机制 : 加载 验证 准备 解析 初始化 运行 狗带

GC

JVMGC

GC主要发生在堆内存中 现在采用为分代回收

判断对象是否是要回收的对象有可达性分析 和引用计数等

引用计数:新增一个引用计数+1 引用被释放计数-1当计数为0则代表对象可回收 (此方法过时)

可达性分析:从GC Root开始 当一个对象和GC Root没有间接或者直接的引用链时(么有直接或者间接的引用关系) 该对象不可用

GC Root包括:1、虚拟机栈中引用的对象。2、方法区中类静态属性实体引用的对象。3、方法区中常量引用的对象。4、 本地方法栈中JNI引用的对象。

分代回收:JVM中分为3个大区 年轻代 老年代 永久代(堆外内存)而大区中又有小区 所有的新生对象都是放在年轻代中 当区块中满了时会将还存存活的对象(没有被GC掉的)移到下个区块

java中gc的认识,java JVM GC 笔记(个人对GC 或JVM 的了解)相关推荐

  1. Java 中的 XML:Java 文档模型的用法

    Java 中的 XML:Java 文档模型的用法 英文原文 内容: 代码对比 DOM JDOM dom4j Electric XML XPP 结束语 下一次... 参考资料 关于作者 对本文的评价 相 ...

  2. 在java中使用JMH(Java Microbenchmark Harness)做性能测试

    文章目录 使用JMH做性能测试 BenchmarkMode Fork和Warmup State和Scope 在java中使用JMH(Java Microbenchmark Harness)做性能测试 ...

  3. java 泛型详解、Java中的泛型方法、 java泛型详解

    本文参考java 泛型详解.Java中的泛型方法. java泛型详解 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用. 什么是泛型?为什么要使用泛型? 泛型,即& ...

  4. Java中如何创建自定义的注解学习笔记(MD版)

    概要 Java中如何创建自定义的注解学习笔记(MD版). 博客 博客地址:IT老兵驿站. 前言 记得这篇笔记还是在泉州的龙玲酒店记录的,是一个周六的晚上,坐飞机从上海到泉州,从笔记中能勾起一些旅游的回 ...

  5. 第64节:Java中的Spring Boot 2.0简介笔记

    Java中的Spring Boot 2.0简介笔记 spring boot简介 依赖java8的运行环境 多模块项目 打包和运行 spring boot是由spring framework构建的,sp ...

  6. java中函数的调用,java中如何调用函数

    java动态调用函数,Java 中使用动态代码,java函数调用,java中如何调用函数 如何在 Java 中调用 C 函数 宗薇 [期刊名称]<网络新媒体技术> [年(卷),期]2000 ...

  7. Java中使用json时java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher问题解决

    Java中使用json时java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher问题解决 参考文章: (1)Java中使用json时java.lan ...

  8. 在Java中调用Python,java面试题,java初级笔试题

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 写在 ...

  9. java中集合的模型特点_Java 学习笔记(十四)集合

    集合 在开发的时候,如果需要存储多个数据,可以使用数组,不过数据是固定长度的,如果需要存储可变长度的多个数据,可以使用集合.集合提供存储空间可变的存储类型,存储的容量可以实时改变 集合分类 Colle ...

  10. android状态机是线程么,Java中的线程状态机 - java

    有没有一种方法可以将线程保留在状态中等待更改? 我的意思是,等一下事情发生了(更改var,调用方法等). 也许它需要使用事件监听器或同步的对象/方法. 这样的状态机通常的方法 statemachine ...

最新文章

  1. php批量处理图片大小,word图片怎么批量调整大小
  2. 枚举目录下的目录和文件CFileFind
  3. 解决MSSQL 2008不能用IP登录的问题
  4. 【转载】Few-shot learning(少样本学习)和 Meta-learning(元学习)概述
  5. php里注册管理员账号,WordPress中创建用户角色的相关PHP函数使用详解
  6. 如何使用两个堆栈实现队列_使用两个队列实现堆栈
  7. 每日一学:如何读取网络图片
  8. oracle truncate闪回数据库恢复
  9. iOS 逆向 - 收藏集 - 掘金
  10. [原]Java程序员的JavaScript学习笔记(1——理念)
  11. Java网络编程进阶:通过JSSE创建安全的数据通信
  12. JavaSE学习--集合01
  13. 当电脑连接网络的地方显示“查找不到任何网络”解决方案
  14. 一看就懂的Android APP开发入门教程
  15. OC Foundation框架 数组
  16. ASP.NET Core WebApi返回结果统一包装实践
  17. 不记得是哪部电影里的段子了
  18. java 合并多个文件_java中如何将两个文件合并到另一个文件
  19. 网站老被劫持快照被黑怎么修复解决
  20. 为什么选择ROS2编程作为机器人工程课程之一?

热门文章

  1. IntelliJ IDEA部署tomcat时Edit Configuration无artifact选项
  2. Java提取mssql备份文件的数据
  3. 基于 abp vNext 和 .NET Core 开发博客项目 - 使用Redis缓存数据
  4. 苹果电脑通过密钥对的方式登录linux系统
  5. Windows访问Fedora共享文件夹
  6. C++设计模式--观察者模式(Observer)
  7. win7笔记本电脑如何分割和重命名磁盘
  8. Linux C :系统调用-fork,wait,subreaper
  9. ESP32彩屏开发板(WT32-SC01),除了买买买,你还可以参与一起设计了
  10. linux系统根分区挂载出错 系统无法,用虚拟机安装linux时显示“没有定义根文件系统,请到分区菜单以修正此错误”,是什么意思,肿么弄谢谢各位...