java JVM GC 笔记(个人对GC 或JVM 的了解)
2018-08-02 05:53:35来源:博客园 阅读 ()
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引用的对象。(第4点是什么鬼东西 没有理解)
分代回收:JVM中分为3个大区 年轻代 老年代 永久代(堆外内存)而大区中又有小区 所有的新生对象都是放在年轻代中 当区块中满了时会将还存存活的对象(没有被GC掉的)移到下个区块
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash