自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 JVM——四种对象引用类型,决定对象在内存中生存的引用关系

在JDK1.2之后,Java将引用的概念进行了扩充,一共分为四类,对可达性分析法来判断一个对象是否还有用具有很大的意义。    一.强引用:    这是一种程序中普遍存在的引用关系,例如Object A = new Object(),这类引用只要还存在,对象就永远不会被回收。    二.软引用    这类引用用来描述一些还有用但是并不是必须的对象,存在软引用的对象会在系统要发生内存溢出时被回收掉。...

2018-04-02 20:18:48 264

原创 JVM——垃圾收集算法

JVM中主要有一下几种垃圾收集算法:        一.标记-清除算法        这是一种最基础的算法,算法分为标记、清楚两个阶段,首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。        缺点:效率低,标记对象和清除对象两个阶段的效率都不高;空间利用率不高,标记清除之后可能会产生大量的不连续的内存碎片,当有一个很大的对象要分配空间时,就会找不到合适的内存给其分配,此...

2018-03-28 19:51:43 438

原创 JVM——方法区的内存回收

方法区的内存回收可以说是“性价比”较低的,因为方法区中需要被回收的资源很少,不像Java堆,Java堆中存放对象的实例,一次回收基本能达到70%--95%的内存回收。方法区中需要被回收的主要有废弃常量和无用的类。        废弃常量是否已经无用的判断是很容易的,但是对于类是否无用的判断就相对比较严格,判断类是否已经无用需要同时满足以下三点:        一.该类的实例已经全部别回收,即Jav...

2018-03-28 19:20:35 859

原创 JVM——finalize()方法之对象存活最后的机会

内存中的对象要被回收至少要经过两次标记才能被回收掉。        我们说过可达性分析法来判断一个对象是否还会被引用,此时即使该对象已经没有任何引用链了,但是该对象也不一定会被回收,这样的对象需要先进行一步筛选,而又不是所有处于该状态的对象都会经过筛选,进行筛选的条件是该对象是否有必要执行finalize()方法,如果该对象没有覆盖finalize()方法或者虚拟机已经执行过该对象的finaliz...

2018-03-28 19:12:10 645 1

原创 JVM——引用计数算法和可达性分析算法——判断对象是否需要被回收

Java程序运行时,所有的实例对象都保存在Java堆里,而大量的实例对象会占用大量的内存空间,保证内存的可用性,需要对不用的对象进行垃圾回收,而进行垃圾回收之前最重要的就是判断某一个对象是否可以被回收,当一个对象不能再被任何途径访问,说明该对象已经没有用了。        下面介绍两种判断对象是否还会被引用的算法——引用计数算法和可达性分析法        引用计数算法:             ...

2018-03-26 20:52:57 1474 1

原创 JVM——对象的访问定位

在java程序中,我们访问对象的操作是非常频繁的。下面来介绍一下访问对象操作在内存中的对应过程。        我们知道,对象实例是存放在java堆中的,而我们new对象时,用一个变量接收新创建的对象,这个变量实际是存在java虚拟机栈中的,既然两个东西不在一个空间里,那怎么使用呢?        我们在程序中顶一个变量接收对象,这个变量其实就是虚拟机栈中的reference数据,这个refere...

2018-03-24 15:25:42 179

原创 JVM——对象的内存布局

以Sun Spot 虚拟机为例子:        对象在虚拟机中存储布局分为三个区域:对象头、实例数据、对齐填充。下面从这三方面开始对象在内存中的布局分析:        1.对象头           对象头包含两个部分,第一部分是对象自身的运行时数据:例如哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等信息。第二部分是类型指针,即指向该对象类元数据的指针,虚拟机中是通...

2018-03-24 14:27:44 260 1

原创 JVM——对象的创建过程

对象的创建过程:我们在Java代码中new 一个对象时,我们很难看到对象创建的过程,尤其是在jvm内存中的过程,下面来介绍一下对象创建在jvm中的过程:    对象实例在jvm中是存在于java堆中的,每一个对象实例都会占用一定的内存空间,    当new执行时,首先会加载new的类    当类加载完成之后,实例对象所占的大小就确定了。    此时,jvm会在java堆中为实例对象开辟一块内存空间...

2018-03-23 20:11:51 2147

原创 jvm原理——java运行时数据区域总结

学JVM的好处:    JVM是Java运行的虚拟机,java文件的编译运行都经过JVM,所以要想写出高效的java程序,对JVM的了解是必须的。只有了解了java实际运行的过程和原理,才能进行最大的优化。而Java程序在运行时一方面要注意安全性,一方面是运行效率,这是程序索要考虑的最大的两个因素。下面来介绍一下Java程序运行时的内存划分以及数据区域相应的概念总结,对于运行时数据区域的详细解读将...

2018-03-23 14:53:32 144

原创 希尔排序原理

希尔排序是一种效率比较高的排序算法所谓希尔排序,可能看起来比较难懂,但是其实就是将数组按照一定的间隔大小分成若干个小数组,对每一个小数组进行排,然后主键缩小间隔,最后达到排序的效果。例如:    1--10十个数,按照4为间隔,一次分为1,5,9;2,6,10;3,7;4,8;5,9.这样的五组,对小数组进行排序是很快的,而且采用的排序得算法也容易选择,效率较高,此时这五组数已经是有顺序的,然后在...

2018-03-21 21:12:00 214

原创 栈和队列的原理以及应用场景

      栈和队列是一个比较抽象的概念,大多数人知道栈和队列的特点,但是实际不知道怎么用,这是大家学习阶段的通病。      要想用栈和队列,首先要明确,他们是什么。1.是什么?    栈和队列其实是一个工具,他们传统的工具方法 工具类不同,他们是“思想”工具,大家都知道,栈是后进先出,队列是先进先出。但是实际怎么用却不知道。2.怎么用?    栈和队列是很好的工具,他们的应用我们平时开发可能用...

2018-03-19 20:43:29 13049 5

原创 冒泡排序、选择排序、插入排序,效率以及应用场景

1.冒泡排序:    冒泡排序是原理最简单的排序,但是他是三种排序算法中效率最低的,他的比较次数和交换数据次数时间复杂度都是O(N²)。    原理:冒泡排序是双重循环,他每次排序都将最大的元素移动到最后一位,比较方式为:0 vs 1,1 vs 2,2 vs 3,。。。直到N-1 vs N,每次比较之后,下次比较不会再去比较上去比较得出的并且移动的最大数据,所以他需要逐条比较。相应Java代码:p...

2018-03-17 18:19:53 4503

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除