一篇文章带你了解Java选择排序和垃圾回收机制

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

[[430263]]

一、垃圾回收机制

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

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

3.对象在内存状态有三种:

可达状态:当一个对象被创建后,有一个以上的引用变量指向它,这个对象就是处于可达状态。

可恢复状态:没有任何引用变量指向这个对象。虚拟机进行垃圾回收之前,系统就会调用所有可恢复状态对象finalize()进行清理。如果系统在调用finalize()方法时重新让一个引用变量指向这个对象会再次变为可达状态,否则,这个对象就进入不可达状态。

不可达状态:当对象与所有引用变量的关联都被断掉,系统已经调用所有对象的finalize()方法还是没有使这个对象变成可达状态时,那么这个对象将永久性地失去引用,最后形成不可达状态。

4.java虚拟机垃圾回收的过程

例如以下代码:

  1. class Person{ 
  2. //定义finalize方法在垃圾回收之前被调用 
  3. public void finalize(){ 
  4.         System.out.println("这个对象会被作为垃圾回收..."); 
  5. public class p9 { 
  6. /** 
  7.  * @param args 
  8.  */ 
  9. public static void main(String[] args) { 
  10. // TODO Auto-generated method stub 
  11.         //创建两个Person的对象 
  12. Person p1=new Person(); 
  13. Person p2=new Person(); 
  14. //把对象设为null 
  15. p1=null
  16. p2=null
  17. //调用垃圾回收方法 
  18. System.gc(); 

输出的结果是:

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

二、Arrays类

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

2.Arrays有以下功能:

数组赋值:通过Arrays.fill()方法用于数组填充;

数组排序:通过Arrays.sort()方法按数组所有元素进行排序,按从小到大的顺序;

数组比较:通过Arrays.equals()方法判断数组元素值是否相等;

查找数组元素:Arrays.binarySearch()方法通过二分法在已经排好序的数组中查找指定的元素,并返回该元素的下标;

数组转换字符串:Arrays.toString()方法将数组转换为字符串并输出;

3.Arrays类例子

代码如下所示:

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

输出的结果是:

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

三、选择排序法

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

2.选择排序法案例

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

输出结果是:

  1. 12 
  2. 25 
  3. 31 
  4. 38 

四、总结

 

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

本文转载自微信公众号「Java进阶学习交流」,可以通过以下二维码关注。转载本文请联系Java进阶学习交流公众号。

 

责任编辑:武晓燕 来源: Java进阶学习交流
相关推荐

2024-02-22 17:15:22

JS垃圾回收机制

2023-05-08 08:21:15

JavaNIO编程

2021-06-30 00:20:12

Hangfire.NET平台

2023-05-12 08:19:12

Netty程序框架

2020-11-17 11:10:21

CSS选择器HTML

2020-05-14 13:39:19

Java 垃圾回收机制

2021-01-29 18:41:16

JavaScript函数语法

2020-11-10 10:48:10

JavaScript属性对象

2021-02-02 18:39:05

JavaScript

2021-06-04 09:56:01

JavaScript 前端switch

2024-01-30 13:47:45

2023-09-06 14:57:46

JavaScript编程语言

2021-01-26 23:46:32

JavaScript数据结构前端

2021-05-18 08:30:42

JavaScript 前端JavaScript时

2024-04-19 14:23:52

SwitchJavaScript开发

2023-07-30 15:18:54

JavaScript属性

2021-03-09 14:04:01

JavaScriptCookie数据

2021-03-05 18:04:15

JavaScript循环代码

2021-09-27 09:18:30

ListIterato接口方法

2020-12-08 08:09:49

SVG图标Web
点赞
收藏

51CTO技术栈公众号