
JVM
文章平均质量分 89
Iovems
这个作者很懒,什么都没留下…
展开
-
7.内存分配与回收策略
自动内存管理主要解决两个问题:给对象分配内存以及回收分配给对象的内存。 关于回收内存这一点,前面介绍的垃圾收集器体系及运作原理,现在就不介绍了。 接下来,就讲讲给对象分配内存的事情。概述 对象的内存分配,就是在堆上分配(但也有可能经过JIT编译后,被拆散为标量类型,并间接地在栈上分配),对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,...原创 2018-04-08 08:45:46 · 1221 阅读 · 0 评论 -
10.Java永久代去哪了
在Java虚拟机中,类包含了其对应的元数据,比如类的层级信息,方法数据和方法信息(如字节码,栈和变量大小),运行时常量池,已确定的符号引用和虚方法表; 在过去(当自定义类加载器使用地不是很普遍的时候),类几乎是静态的,并且很少被卸载和回收;因此类可以被看做是“永久的”;另外由于类作为JVM实现的一部分,它们不由程序来创建,因此它们也被认为是“非堆”的内存; 在JDK...原创 2018-05-16 17:04:10 · 1965 阅读 · 0 评论 -
9.虚拟机类加载机制
概述 虚拟机把描述类的数据从Class文件中加载到内存,并对数据进行校验,转换解析和初始化,最终形成可被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制; 类型的加载,连接和初始化都是在程序运行时完成的,这种做法虽然能增加性能开销,但运行期动态加载和动态连接是Java的动态扩展的基础;类加载机制 解析阶段可以在初始化阶段之后进行,这是为了支持Java的运行...原创 2018-04-21 17:10:43 · 1153 阅读 · 0 评论 -
8.类文件结构
Class类文件的数据结构 任何一个Class文件都对应着唯一一个类或接口的定义信息,但反过来说,类或接口并不一定都得定义在文件里(比如,类或接口也可以通过类加载器直接生成); Class文件是一组以8位字节为基础单位的二进制流,没有任何分隔符;当遇到需要占用8位字节以上空间的数据项时,则会按照高位在前的方式分割成若干个8位字节进行存储; Class文件格式采用...原创 2018-04-21 15:35:11 · 1132 阅读 · 0 评论 -
2.Java堆对象分配,布局和访问的全过程
对象的创建 这里说的对象指的是普通Java对象,不包括数据和Class对象等。 类加载过程:虚拟机遇到new指令,首先去检查new指令的参数是否能在常量池中定位到一个类的符号引用,并且这个符号引用代表的类是否已被加载,解析和初始化过。如果没有,那么先执行相应的类加载过程。 堆内存分配:在类加载检查通过后,要创建的对象所需的内存大小已经确定了,虚拟机将一块确定大小...原创 2018-03-31 14:51:08 · 1345 阅读 · 0 评论 -
Java内存模型(JMM)
多任务和高并发的内存交互多任务和高并发是衡量一台计算机处理器的能力重要指标之一。一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标比较能说明问题,它代表着一秒内服务器平均能响应的请求数,而TPS值与程序的并发能力有着非常密切的关系。物理机的并发问题与虚拟机中的情况有很多相似之处...转载 2018-04-10 11:50:11 · 1163 阅读 · 0 评论 -
1.JVM优化-JVM运行时数据区域
内存动态分配和垃圾收集技术是JVM的关键技术运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。每个区域都有各自的用途,以及各自的创建和销毁时间。有些区域随着虚拟机进程的启动而建立,有些区域则依赖于用户线程的启动和结束而建立和销毁。程序计数器(Program Counter Register) 程序计数器是一块较...原创 2018-03-27 23:29:58 · 992 阅读 · 1 评论 -
6.内存回收的具体实现-垃圾收集器
上图展示了7种用于不同分代的垃圾收集器; 如果两个收集器之间存在连线,这说明它们可以搭配使用; 虚拟机所处的区域,则表示它是属于新生代收集器还是老年代收集器;Serial收集器 具有两个特点: 1.只会使用一个线程去完成垃圾回收工作; 2.在进行垃圾回收的时候,必须暂停其他所有的工作线程,直至它收集结束;Stop...原创 2018-04-01 18:50:03 · 1084 阅读 · 0 评论 -
5.内存回收的方法论-垃圾收集算法
标记-清除算法 算法分为:标记和清除,两个阶段。 首先标记出所有需要回收的对象(用可达性分析),在标记完成后同一回收所有被标记的对象,它的标记过程和前一节讲的对象标记判定时已经介绍过了。 有两个不足之处:第一,效率问题,标记和清除两个过程的效率都不高;第二,空间碎片问题,标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在需要分配较大对象时,无法...原创 2018-04-01 14:24:31 · 1011 阅读 · 0 评论 -
4.回收方法区
Java虚拟机规范当中确实说过可以不要求虚拟机在方法区实现垃圾收集,而且在方法区中进行垃圾收集的“性价比”比较低。在堆中,尤其是在新生代中,常规应用进行一次垃圾收集一般可以回收70%~95%的空间,而永久代的垃圾收集效率远低于此。 永久代的垃圾收集主要回收两部分内容:废弃常量和无用的类。回收废弃常量与回收Java堆中的对象非常类似。 以常量池中字面量的回收为例,...原创 2018-03-31 22:40:54 · 1005 阅读 · 0 评论 -
3.检测对象是否可以回收及Java的引用
确定对象是否可以回收了 在堆里面存放了几乎所有的对象实例,垃圾收集器在对堆进行来及回收之前,需要确定哪些对象可以被回收了(即,不可能再被任何途径使用了)。引用计数算法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用了。 很多人,是这样解释引用计数算法的。 引用计数...原创 2018-03-31 22:03:03 · 1250 阅读 · 1 评论 -
11.深入G1垃圾回收器
Gl垃圾回收器的全称是Garbage First GC,之所以叫这个名字是因为G1 GC是一个压缩收集器,它基于回收最大量的垃圾原理进行设计; G1垃圾回收器采用递增、并行运算、独占式运算的特征方式,并采用拷贝技术实现自身的压缩目标。同时,通过并行的多阶段标记方式缩短各层级(标记、重标记、清除等阶段)的停顿时间。即G1垃圾回收器具有多层级、无间隔排查的特点; ...原创 2018-06-09 15:58:36 · 1388 阅读 · 0 评论