上一页 1 ··· 20 21 22 23 24
摘要: 每一种收集器的日志形式都是由它们自身的实现所决定的,换而言之,每个收集器的日志格式都可以不一样。但虚拟机设计者为了方便用户阅读,将各个收集器的日志都维持一定的共性,例如以下两段典型的GC日志: 33.125: [GC [DefNew: 3324K->152K(3712K), 0.0025925 se 阅读全文
posted @ 2016-11-22 22:20 kosamino 阅读(441) 评论(0) 推荐(0) 编辑
摘要: 分代式GC里,年老代常用mark-sweep;或者是mark-sweep/mark-compact的混合方式,一般情况下用mark-sweep,统计估算碎片量达到一定程度时用mark-compact。这是因为传统上大家认为年老代的对象可能会长时间存活且存活率高,或者是比较大,这样拷贝起来不划算,还不 阅读全文
posted @ 2016-11-18 00:33 kosamino 阅读(1720) 评论(0) 推荐(0) 编辑
摘要: 每个人都知道,各种各样的动画视频,都是由一帧一帧图片连续切换结果的结果而产生的,其实虚拟机的运行和动画也类似,每个在虚拟机中运行的程序也是由许多的帧的切换产生的结果,只是这些帧里面存放的是方法的局部变量,操作数栈,动态链接,方法返回地址和一些额外的附加信息组成,在虚拟机中包含这些信息的帧称为“栈帧” 阅读全文
posted @ 2016-11-18 00:24 kosamino 阅读(2071) 评论(0) 推荐(0) 编辑
摘要: HotSpot JVM收集器 上面有7中收集器,分为两块,上面为新生代收集器,下面是老年代收集器。如果两个收集器之间存在连线,就说明它们可以搭配使用。 并发和并行 先解释下什么是垃圾收集器的上下文语境中的并行和并发: 并行(Parallel):指多条垃圾收集器线程并行工作,但此时用户线程仍然处于等待 阅读全文
posted @ 2016-11-16 23:31 kosamino 阅读(1985) 评论(0) 推荐(2) 编辑
摘要: 1.枚举根节点 在可达性分析中,可以作为GC Roots的节点有很多,但是现在很多应用仅仅方法区就有上百MB,如果逐个检查的话,效率就会变得不可接受。 而且,可达性分析必须在一个一致性的快照中进行-即整个分析期间,系统就像冻结了一样。否则如果一边分析,系统一边动态表化,得到的结果就没有准确性。这就导 阅读全文
posted @ 2016-11-16 22:26 kosamino 阅读(994) 评论(0) 推荐(0) 编辑
摘要: 1.标记-清除算法 对所有存活对象进行一次全局遍历来确定哪些对象可以回收,遍历的过程从根出发,找到所有可达对象,除此之外,其它不可达的对象就是垃圾对象,可被回收。整个过程分为两个阶段:标记阶段找到所有存活对象;清除阶段清除所有垃圾对象。 优点:采用的可达性分析算法,相比较引用计数算法,标记-清除算法 阅读全文
posted @ 2016-11-16 21:59 kosamino 阅读(376) 评论(0) 推荐(0) 编辑
摘要: 1.概述 Java内存运行时区域的各个部分里: 其中程序计数器、虚拟机栈、本地方法栈3各区域随线程而生,随线程而灭。栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每个栈帧中分配多少内存基本上是在类结构定下来是就已知了,因此这几个区域的内存分配和回收都具备确定性,不需过多考虑。 而堆 阅读全文
posted @ 2016-11-15 23:28 kosamino 阅读(467) 评论(0) 推荐(0) 编辑
摘要: 1. 对象的创建 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程,在类的加载检查通过后,接下来java虚拟机会为新生对象会在堆中划分出一定的内存。对象所需内 阅读全文
posted @ 2016-11-15 21:33 kosamino 阅读(303) 评论(0) 推荐(1) 编辑
摘要: Java虚拟机在执行java程序的过程中会把他管理的内存划分为若干个不同的数据区域各自用途、创建以及销毁时间各不相同。有的随着虚拟机进行的启动而存在,有的区域依赖于线程的启动和结束而建立以及销毁。如图: 1.程序计数器 Jvm将这个计数看作当前线程(意味着只能支持单线程)执行某条字节码的行号指示器, 阅读全文
posted @ 2016-11-02 01:42 kosamino 阅读(511) 评论(0) 推荐(0) 编辑
摘要: 首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条SQL语句如果用来从一个 10万条记录的表中查1条记录,那查询优化器会选择“索引查找”方式,如果该表进行了归档,当前只剩下5000条记录了,那查询优化器就会 阅读全文
posted @ 2016-10-25 00:02 kosamino 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 附:本博文记录反射基础知识,扩展请参见反射目录下的其余博文。 一.通过一个对象获得完整的包名和类名 方法:class.getClass().getName()。 二.实例化Class类对象 有三种方法: 1.推荐此种方式进行构建类:Class.forName("className"); 2.java 阅读全文
posted @ 2016-10-20 01:22 kosamino 阅读(506) 评论(0) 推荐(0) 编辑
摘要: 一.简介 在一般情况下,创建一个线程是不能提高程序的执行效率的,所以要创建多个线程。但是多个线程同时运行的时候可能调用线程函数,在多个线程同时对同一个内存地址进行写入,由于CPU时间调度上的问题,写入数据会被多次的覆盖,所以就要使线程同步。 线程同步:即当有一个线程在对内存进行操作时,其他线程都不可 阅读全文
posted @ 2016-10-11 02:32 kosamino 阅读(300) 评论(0) 推荐(0) 编辑
摘要: 一.产生死锁的四个必要条件: (1) 互斥条件:一个资源每次只能被一个进程使用。(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。 二  阅读全文
posted @ 2016-10-11 01:51 kosamino 阅读(32400) 评论(0) 推荐(0) 编辑
摘要: 对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类中的。 sleep()方法导致了程序暂停执行指定的时间,让出cpu给其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。 在调用sleep()方法的过程中,线程不会 阅读全文
posted @ 2016-10-08 23:16 kosamino 阅读(289) 评论(0) 推荐(0) 编辑
摘要: 一.线程的基本概念 1.线程是一个程序内部的顺序控制流。 2.Java的线程是通过java.lang.Thread类来实现的。 3.VM启动时会有一个由主方法{public static void main(Args[] String)}所定义的线程。 4.可以通过创建新的Thread实例来创建新的 阅读全文
posted @ 2016-09-30 00:59 kosamino 阅读(511) 评论(0) 推荐(0) 编辑
上一页 1 ··· 20 21 22 23 24