Java选择排序和垃圾回收机制详情

目录
  • 一、垃圾回收机制
  • 二、Arrays类
  • 三、选择排序法
  • 四、总结

一、垃圾回收机制

创建对象就会占据内存,如果程序在执行过程中不能再使用某个对象,这个对象是徒耗内存的垃圾。作为程序员不用关心回收垃圾对象问题,因为java虚拟机会自动回收垃圾对象所占用的内存空间。

当一个对象成为垃圾后会暂时保留在内存,如果垃圾堆满了,Java虚拟机有垃圾回收机制,收集到的垃圾对象所占的内存空间,会给垃圾收集器释放。然而程序会有很多的存储空间。也可以通过调用System.gc()方法让java虚拟机进行垃圾回收,当一个对象在内存中被释放,可以通过finalize()方法会被自动调用。

对象在内存状态有三种:

  • 可达状态:当一个对象被创建后,有一个以上的引用变量指向它,这个对象就是处于可达状态。
  • 可恢复状态:没有任何引用变量指向这个对象。虚拟机进行垃圾回收之前,系统就会调用所有可恢复状态对象finalize()进行清理。如果系统在调用finalize()方法时重新让一个引用变量指向这个对象会再次变为可达状态,否则,这个对象就进入不可达状态。
  • 不可达状态:当对象与所有引用变量的关联都被断掉,系统已经调用所有对象的finalize()方法还是没有使这个对象变成可达状态时,那么这个对象将永久性地失去引用,最后形成不可达状态。

java虚拟机垃圾回收的过程

例如以下代码:

class Person{
//定义finalize方法在垃圾回收之前被调用
public void finalize(){
        System.out.println("这个对象会被作为垃圾回收...");
}
}
public class p9 {
/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
        //创建两个Person的对象
Person p1=new Person();
Person p2=new Person();
//把对象设为null
p1=null;
p2=null;
//调用垃圾回收方法
System.gc();
}

输出的结果是:

这个对象会被作为垃圾回收...
 
这个对象会被作为垃圾回收...

二、Arrays类

Java提供了Arrays类方便用于对数组进行操作。

Arrays有以下功能:

  • 数组赋值:通过Arrays.fill()方法用于数组填充;
  • 数组排序:通过Arrays.sort()方法按数组所有元素进行排序,按从小到大的顺序;
  • 数组比较:通过Arrays.equals()方法判断数组元素值是否相等;
  • 查找数组元素Arrays.binarySearch()方法通过二分法在已经排好序的数组中查找指定的元素,并返回该元素的下标;
  • 数组转换字符串:Arrays.toString()方法将数组转换为字符串并输出;

Arrays类例子

代码如下所示:

public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a1 = new int[]{5, 2 , 3, 9};
    int[] a2 = new int[]{5, 2 , 3, 9};
    //Arrays.equals()方法判断数组元素是否相等
    System.out.println("a1数组和a2数组是否相等:" + Arrays.equals(a1 , a2));
    int[] b = Arrays.copyOf(a1, 6);
    System.out.println("a1数组和b数组是否相等:" + Arrays.equals(a1 , b));
    //toString()方法将数组转换字符串
    System.out.println("b数组的元素为:" + Arrays.toString(b));
    //Array.fill()方法数组赋值
    Arrays.fill(b , 2, 4 , 1);
    System.out.println("b数组的元素为:" + Arrays.toString(b));
    //Arrsays.sort()方法数组排序
    Arrays.sort(b);
    System.out.println("b数组的元素为:" + Arrays.toString(b));
}

输出的结果是:

a1数组和a2数组是否相等:true
a1数组和b数组是否相等:false
b数组的元素为:[5, 2, 3, 9, 0, 0]
b数组的元素为:[5, 2, 1, 1, 0, 0]
b数组的元素为:[0, 0, 1, 1, 2, 5]

三、选择排序法

首先找到最小元素所在位置的下标(索引),将这个元素与第一位上的元素进行交换。

选择排序法案例

public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[]= {12,31,25,7,38};//定义一个数组
    for(int i=0;i<arr.length;i++) {
        int temp=i;
          //数组中从i开始的最小的元素所在位置的下标(索引)赋值给temp
        for(int j=i;j<arr.length;j++) {
            if(arr[j]<arr[temp]) {
                temp=j;
            }
        }
        //上面获取了数组中从i开始的最小值的下标(索引)temp,索引把第i位上的元素与其进行交换
        int temp1=arr[i];
        arr[i]=arr[temp];
        arr[temp]=temp1;
        System.out.println(arr[i]);
  }
}

输出结果是:

7
12
25
31
38

四、总结

本文主要介绍了java垃圾回收机制、Arrays类、选择排序法。java的垃圾回收机制简要的说明对象在内存中状态分别有三种:可达状态、可恢复状态、不可达状态。通过一个java虚拟机垃圾回收机制的案例帮助大家理解这个过程。Arrays类方便用于对数组的操作,介绍了Arrays的几个功能。常用的选择排序法,首先是找到最小元素的所在位置的索引,将这个元素与第一位上的元素进行交换。通过本文的学习,希望对大家有所帮助!

到此这篇关于Java选择排序和垃圾回收机制详情的文章就介绍到这了,更多相关Java选择排序和垃圾回收机制内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java实现选择排序

    问题描述 利用选择排序把一列数组按从小到大或从大到小排序 (一).选择排序思想 以从小到大为例: 1.第一轮选择,从第一个数开始,依次比较后面所有的数,不断选出当前最小的数,直到选出这一轮最小的数,放到第一位 2.第二轮选择,从第二个数开始,依次比较后面所有的数,不断选出当前最小的数,直到选出这一轮最小的数,放到第二位 3.如此循环,直到所有数从小到大排列 (二).问题分析 1. 输入数组 根据用户输入的进行排序的数字数量n,建立一个长度为n的数组 public static void main

  • java Comparator.comparing排序使用示例

    目录 背景 实体类 示例一 示例二 背景 以前常用的排序方式是通过实现Comparator接口来进行排序,写法相对来说比较复杂,使用Comparator.comparing可以简化代码,看起来逻辑更清晰. 实体类 import lombok.Data; /** * @Author: ck * @Date: 2021/10/12 3:51 下午 */ @Data public class Model { private String name; private int age; } 示例一 通过实

  • 一文带你回顾Java中的垃圾回收机制

    目录 介绍 重要条款: 使对象符合 GC 条件的方法 请求JVM运行垃圾收集器的方式 定稿 让我们举一个真实的例子,在那里我们使用垃圾收集器的概念. 现在获得正确的输出: 总结 介绍 在 C/C++ 中,程序员负责对象的创建和销毁.通常程序员会忽略无用对象的销毁.由于这种疏忽,在某些时候,为了创建新对象,可能没有足够的内存可用,整个程序将异常终止,导致OutOfMemoryErrors. 但是在 Java 中,程序员不需要关心所有不再使用的对象.垃圾回收机制自动销毁这些对象. 垃圾回收机制是守护

  • Java常用的八种排序算法与代码实现

    目录 1.直接插入排序 2.希尔排序 3.简单选择排序 4.堆排序 5.冒泡排序 6.快速排序 7.归并排序 8.基数排序 1.直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中. 将第一个数和第二个数排序,然后构成一个有序序列 将第三个数插入进去,构成一个新的有序序列. 对第四个数.第五个数--直到最后一个数,重复第二步. 如何写写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用插入. 设定插入数和得到已经排好

  • 一篇带你入门Java垃圾回收器

    目录 1 垃圾回收算法 1-1 标记清除算法 算法思想 1-2 标记整理算法 1-3 复制算法 2 JVM分代回收算法 2-1 概述 2-2 分代垃圾回收示例 2-3 分代垃圾回收的总结 对象首先分配在伊甸园区域 2-5 垃圾回收案例分析 2 垃圾回收器 2-1 垃圾回收器概述 2-2 串行垃圾回收器 2-3 吞吐量优先的垃圾回收器 2-4 响应时间优先的垃圾回收器(CMS垃圾回收器) 总结: 第一阶段:串行垃圾回收器:jdk1.3.1之前Java虚拟机仅仅只支持Serial收集器 第二阶段:并

  • JAVA十大排序算法之基数排序详解

    目录 基数排序 代码实现 时间复杂度 算法稳定性 基数排序 vs 桶排序 vs 计数排序 总结 基数排序 常见的数据元素一般是由若干位组成的,比如字符串由若干字符组成,整数由若干位0~9数字组成. 基数排序按照从右往左的顺序,依次将每一位都当做一次关键字,然后按照该关键字对数组排序,同时每一轮排序都基于上轮排序后的结果:当我们将所有的位排序后,整个数组就达到有序状态.基数排序不是基于比较的算法. 基数是什么意思?对于十进制整数,每一位都只可能是0~9中的某一个,总共10种可能.那10就是它的基,

  • JAVA十大排序算法之桶排序详解

    目录 桶排序 代码实现 时间复杂度 算法稳定性 总结 桶排序 桶排序是计数排序的升级,计数排序可以看成每个桶只存储相同元素,而桶排序每个桶存储一定范围的元素,通过函数的某种映射关系,将待排序数组中的元素映射到各个对应的桶中,对每个桶中的元素进行排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序),最后将非空桶中的元素逐个放入原序列中. 桶排序需要尽量保证元素分散均匀,否则当所有数据集中在同一个桶中时,桶排序失效. 代码实现 1.找出数组中的最大值max和最小值min,可以确定出数组所在范

  • Java 中的垃圾回收机制详解

    目录 介绍 重要条款: 使对象符合 GC 条件的方法 请求JVM运行垃圾收集器的方式 定稿 总结 介绍 在 C/C++ 中,程序员负责对象的创建和销毁.通常程序员会忽略无用对象的销毁.由于这种疏忽,在某些时候,为了创建新对象,可能没有足够的内存可用,整个程序将异常终止,导致OutOfMemoryErrors. 但是在 Java 中,程序员不需要关心所有不再使用的对象.垃圾回收机制自动销毁这些对象. 垃圾回收机制是守护线程的最佳示例,因为它始终在后台运行. 垃圾回收机制的主要目标是通过销毁无法访问

  • java 垃圾回收机制以及经典垃圾回收器详解

    判断对象存活方法 引用计数法:在对象中添加一个引用计数子,每当一个地方引用他时,计数器就加一,当引用失效时,计数器就减一. 会有对象循环引用问题: objA.instance = objB objB.instance = objA objA 有objB 的引用 objB 有 objA 的引用,他们相互引用着对方.导致他们无法回收. 可达性分析: 从GC Roots 根对象作为起点,根据引用关系向下搜索,如果对象可达,就说明对象存活,如果对象不可达,就说明对象可以被回收. GC Roots的根对象

  • Java选择排序和垃圾回收机制详情

    目录 一.垃圾回收机制 二.Arrays类 三.选择排序法 四.总结 一.垃圾回收机制 创建对象就会占据内存,如果程序在执行过程中不能再使用某个对象,这个对象是徒耗内存的垃圾.作为程序员不用关心回收垃圾对象问题,因为java虚拟机会自动回收垃圾对象所占用的内存空间. 当一个对象成为垃圾后会暂时保留在内存,如果垃圾堆满了,Java虚拟机有垃圾回收机制,收集到的垃圾对象所占的内存空间,会给垃圾收集器释放.然而程序会有很多的存储空间.也可以通过调用System.gc()方法让java虚拟机进行垃圾回收

  • Java超详细分析垃圾回收机制

    目录 前言 垃圾回收概述 内存溢出和内存泄漏 垃圾回收算法 标记阶段 STW(Stop-the-World) 回收阶段 标记-清除算法 复制算法 标记-压缩算法 三种算法的比较 总结 前言 在前面我们对类加载, 运行时数据区 ,执行引擎等作了详细的介绍 , 这节我们来看另一重点 : 垃圾回收. 垃圾回收概述 垃圾回收是java的招牌能力 ,极大的提高了开发效率, java是自动化的垃圾回收, 其他语言有的则需要程序员手动回收 , 那么什么是垃圾呢? 垃圾是指在运行程序中没有任何引用指向的对象,这

  • Java详细分析梳理垃圾回收机制

    目录 Java语言的垃圾回收 1.垃圾回收机制的基本概念 2.Java垃圾回收机制的好处 3.Java垃圾回收机制的特点 总结 Java语言的垃圾回收 1.垃圾回收机制的基本概念 问:1.什么是Java垃圾回收? 答:在Java语言的生命周期中,Java运行环境提供了一个系统的垃圾回收器线程,负责自动回收那些没有引用与之相连的对象所占用的内存.这种清楚无用对象进行内存回收的过程叫做垃圾回收. 问:2.Java垃圾回收的作用是什么? 答:垃圾回收是Java语言提供的一种自动内存回收的功能,可以让程

  • Python文件处理与垃圾回收机制详情

    目录 01.文件操作 1.1.文件操作流程 1.2.文件的操作模式 1.3.操作文件的方法 1.4.主动移动文件内指针移动 1.5文件的修改 1.6垃圾回收机制 01.文件操作 文件是操作系统提供给用户/应用程序操作硬盘的一个虚拟的概念/接口 用户/应用程序可以通过文件将数据永久保存在硬盘中 用户/应用程序直接操作的是文件,对文件进行的所有的操作,都是在向操作系统发送系统调用,然后再由操作系统将其转成具体的硬盘操作 1.1.文件操作流程 打开文件: 打开文件,由应用系统向操作系统发起系统调用op

  • PHP5.3的垃圾回收机制(动态存储分配方案)深入理解

    垃圾回收机制是一种动态存储分配方案.它会自动释放程序不再需要的已分配的内存块. 自动回收内存的过程叫垃圾收集.垃圾回收机制可以让程序员不必过分关心程序内存分配,从而将更多的精力投入到业务逻辑. 在现在的流行各种语言当中,垃圾回收机制是新一代语言所共有的特征,如Python.PHP.Eiffel.C#.Ruby等都使用了垃圾回收机制. 虽然垃圾回收是现在比较流行的做法,但是它的年纪已经不小了.早在20世纪60年代MIT开发的Lisp系统中就已经有了它的身影, 但是由于当时技术条件不成熟,从而使得垃

  • Java 垃圾回收机制详解(动力节点Java学院整理)

    1. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象:而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾.JVM的一个系统级线程会自动释放该内存块.垃圾回收意味着程序不再需要的对象是"无用信息",这些信息将被丢弃.当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用.事实上,除了释放没用的对象,垃圾回收也可以清除内存记录碎片.由于创建对象和垃圾回收器释放丢弃对象所占的内存空间,

  • 基于java中stack与heap的区别,java中的垃圾回收机制的相关介绍

    #. 在java中有两类内存.分别称为stack(堆栈)和heap(堆). stack是程序内存空间,因此所有的基本类型和对象的引用是存在stack中. heap是java虚拟机储存对象的,它是一个巨大的内存,当你创造一个对象,java虚拟机把对象放入heap中,把创造的对象的地址放入stack中. 因此,基本类型.对象的引用储存在stack中:对象储存在heap中. #. java中的垃圾回收机制 当你new一个新的对象,java分配必需的内存.当你用完一个对象时,java的垃圾回收器为你把内

  • 简单理解Java的垃圾回收机制与finalize方法的作用

    垃圾回收器要回收对象的时候,首先要调用这个类的finalize方法(你可以 写程序验证这个结论),一般的纯Java编写的Class不需要重新覆盖这个方法,因为Object已经实现了一个默认的,除非我们要实现特殊的功能(这 里面涉及到很多东西,比如对象空间树等内容). 不过用Java以外的代码编写的Class(比如JNI,C++的new方法分配的内存),垃圾回收器并不能对这些部分进行正确的回收,这时就需要我们覆盖默认的方法来实现对这部分内存的正确释放和回收(比如C++需要delete). 总之,f

  • Java 垃圾回收机制详解及实例代码

     Java 垃圾回收机制详解 乍一看,垃圾回收所做的事情应当恰如其名--查找并清除垃圾.事实上却恰恰相反.垃圾回收会跟踪所有仍在使用的对象,然后将剩余的对象标记为垃圾.牢记了这点之后,我们再来深入地了解下这个被称为"垃圾回收"的自动化内存回收在JVM中到底是如何实现的. 手动管理内存 在介绍现代版的垃圾回收之前,我们先来简单地回顾下需要手动地显式分配及释放内存的那些日子.如果你忘了去释放内存,那么这块内存就无法重用了.这块内存被占有了却没被使用.这种场景被称之为内存泄露. 下面是用C写

  • 深入理解Java垃圾回收机制以及内存泄漏

    前言 在segmentfault上看到一个问题:java有完善的GC机制,那么在java中是否会出现内存泄漏的问题,以及能否给出一个内存泄漏的案例.本问题视图给出此问题的完整答案. 垃圾回收机制简介 在程序运行过程中,每创建一个对象都会被分配一定的内存用以存储对象数据.如果只是不停的分配内存,那么程序迟早面临内存不足的问题.所以在任何语言中,都会有一个内存回收机制来释放过期对象的内存,以保证内存能够被重复利用. 内存回收机制按照实现角色的不同可以分为两种,一种是程序员手动实现内存的释放(比如C语

随机推荐