随笔分类 - java虚拟机
摘要:1.原因 JVM在程序运行过程当中,会创建大量的对象,这些对象,大部分是短周期的对象,小部分是长周期的对象,对于短周期的对象,需要频繁地进行垃圾回收以保证无用对象尽早被释放掉,对于长周期对象,则不需要频率垃圾回收以确保无谓地垃圾扫描检测。为解决这种矛盾,Sun JVM的内存管理采用分代的策略。 2.
阅读全文
摘要:1.基本概念 双亲委托机制:当某个特定的类加载器在接收到加载类的请求时,首先将该加载任务发送给父类加载器,若父类加载器仍有父类,则继续向上追溯,直到最高级。 如果最高级父类能够加载到该类,则成功返回,否则由其子类进行加载。以此类推,如果到最后一个子类还不能成功加载,则抛出一个异常。 作用:可以保证j
阅读全文
摘要:1.概述 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制。下面我们将详细的讨论一下类的加载过程 与那些编译时需要进行链接的语言不同,在java语言中,类的加载、链接和初始化都是在程序运行期间完成
阅读全文
摘要:1.概述 对象的内存分配,往大方向上讲,就是在堆上分配内存。对象主要分布在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。少数情况下也可直接分配在老年代中。 分配的规则并不是百分百固定的,其细节取决于当前使用的是哪一种垃圾收集器组合和虚拟机中与内存相关的参数设置。 接
阅读全文
摘要:1.垃圾收集算法介绍 垃圾收集算法有很多,并且各个虚拟实现的方式也有所不同,并且其中大量的设计程序细节,所以这里只讨论算法的基本思路。 常见的垃圾收集算法:1.标记-清除算法 2.复制算法 3.标记-整理算法 4.分代收集算法 下面我们开始逐一介绍每一种算法 1.1 标记-清除算法 标记-清除算法是
阅读全文
摘要:1.概述 1.1垃圾回收需要完成的三件事 Lisp语言是第一门真正使用内存分配和动态垃圾收集技术的语言。当Lisp还在胚胎时期时,人们就开始思考GC需要完成的三件事: (1) 哪些内存需要回收 (2) 什么时候回收 (3) 如何回收 1.2 为什么要了解GC和内存分配 虽然经过半个多世纪的发展,目前
阅读全文
摘要:1.运行时数据区域 1.程序计数器:是一块较小的内存空间,它可以看作是当前线程所执行字节码的行号指示器,字节码解释器工作时就是通过改变程序计数器的值来选取下一条指令的地址。分支、循环、跳转、异常处理、线程恢复等基础功能都是由这个计数器来完成。 每一条线程都要有一个属于自己的独立的程序计数器,所以该块
阅读全文

浙公网安备 33010602011771号