JVM
文章平均质量分 87
ustcyy91
这个作者很懒,什么都没留下…
展开
-
垃圾回收算法——复制算法 以及eden和survivor
复制(Copying)算法说到底也是为了解决标记-清除算法产生的那些碎片。首先将内存分为大小相等的两部分(假设A、B两部分),每次呢只使用其中的一部分(这里我们假设为A区),等这部分用完了,这时候就将这里面还能活下来的对象复制到另一部分内存(这里设为B区)中,然后把A区中的剩下部分全部清理掉。这样一来每次清理都要对一半的内存进行回收操作,这样内存碎片的问题就解决了,可以说简单,高效转载 2017-08-05 18:34:02 · 4240 阅读 · 0 评论 -
为什么新生代内存需要有两个Survivor区
那么,在JVM的新生代内存中,为什么除了Eden区,还要设置两个Survivor区?1 为什么要有Survivor区先不去想为什么有两个Survivor区,第一个问题是,设置Survivor区的意义在哪里? 如果没有Survivor,Eden区每进行一次Minor GC,存活的对象就会被送到老年代。老年代很快被填满,触发Major GC(因为Major GC一般伴随着M转载 2017-12-21 16:39:17 · 279 阅读 · 0 评论 -
Java——类加载机制
概述Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数,属性和方法等,Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能。虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类转载 2017-07-23 16:38:28 · 243 阅读 · 0 评论 -
JVM 解析阶段 符号引用和直接引用的区别
在JVM中,类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段。而解析阶段即是虚拟机将常量池内的符号引用替换为直接引用的过程。1.符号引用(Symbolic References):符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能够无歧义的定位到目标即可。例如,在Class文件中它以CONS转载 2017-12-08 15:33:02 · 1233 阅读 · 0 评论 -
javac编译原理
注:本文主要记录自《深入分析java web技术内幕》"第四章 javac编译原理"1、javac作用将*.java源代码文件转化为*.class文件 2、编译流程流程:词法分析器:将源码转换为Token流将源代码划分成一个个Token(Token包含的元素类型看3.2)语法分析器:将Token流转化为语法树将上述的一个个转载 2017-11-08 10:32:41 · 203 阅读 · 0 评论 -
一个简单Class文件的分析
一个简单Class文件的分析(多图)Chown1 年前一个简单Class文件的分析(多图)Class文件是Java中类或接口的紧凑二进制表示形式,可以被JVM加载,链接,执行。这里通过看一个简单的Class文件作为入门。开始package com.vonzhou.learn.jvm.klass;public class Foo { pri转载 2017-11-06 21:53:20 · 246 阅读 · 0 评论 -
java栈帧结构
运行时栈帧结构栈帧(Stack Frame) 是用于虚拟机执行时方法调用和方法执行时的数据结构,它是虚拟栈数据区的组成元素。每一个方法从调用到方法返回都对应着一个栈帧入栈出栈的过程。每一个栈帧在编译程序代码的时候所需要多大的局部变量表,多深的操作数栈都已经决定了,并且写入到方发表的 Code 属性之中,一次一个栈帧需要多少内存,不会受到程序运行期变量数据的影响,仅仅取决于具体的虚拟转载 2017-08-06 20:29:11 · 1027 阅读 · 0 评论 -
Class类文件结构
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17675609 平台无关性 Java是与平台无关的语言,这得益于Java源代码编译后生成的存储字节码的文件,即Class文件,以及Java虚拟机的实现。不仅使用Java编译器可以把Java代码编译成存储字节码的Class文件,使用JRuby等其他语言的编译器也可转载 2017-08-06 11:37:07 · 238 阅读 · 0 评论 -
GC算法
引用计数:一个对象被引用计数器加一,取消引用计数器减一,引用计数器为0才能被回收。优点:简单。缺点:不能解决循环引用的问题,比如A引用B,B引用A,但是这两个对象没有被其他任何对象引用,属于垃圾对象,却不能回收;每次引用都会附件一个加减法,影响性能。标记清除法:分为两个阶段:标记阶段和清除阶段。标记阶段通过根节点标记所有可达对象,清除阶段清除所有不可达对象。缺点:因为清除不可达对象之后剩余的内存不...原创 2017-08-06 09:53:24 · 232 阅读 · 0 评论 -
GC
GC是在什么时候,对什么东西,做了什么事情?1.在什么时候:eden满了minor gc,升到老年代的对象大于老年代剩余空间full gc,或者小于时被HandlePromotionFailure参数强制full gc;gc与非gc时间耗时超过了GCTimeRatio的限制引发OOM,调优诸如通过NewRatio控制新生代老年代比例,通过MaxTenuringThreshold控制原创 2017-08-06 09:45:58 · 333 阅读 · 0 评论 -
垃圾收集算法
1. 标记 - 清除算法 标记清除算法是最基础的收集算法,其他收集算法都是基于这种思想。标记清除算法分为“标记”和“清除”两个阶段:首先标记出需要回收的对象,标记完成之后统一清除对象。它的主要缺点:①.标记和清除过程效率不高 。②.标记清除之后会产生大量不连续的内存碎片。、2. 复制算法它将可用内存容量划分为大小相等的两块,每次只使用其中的一块。当这一块用完之后,就转载 2017-08-05 20:11:14 · 188 阅读 · 0 评论 -
Java并发编程------volatile关键字
Java并发编程:volatile关键字解析请参见这个链接:http://www.importnew.com/18126.html要点:并发编程中的三个概念1.原子性:要做就一次做完 要么就别做2.可见性:可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。3.有序性:即程序执行的顺序按照代码的先后顺转载 2017-12-07 15:25:19 · 305 阅读 · 0 评论