自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一篇文章帶你了解Java選擇排序和垃圾回收機制

開發(fā) 后端
創(chuàng)建對象就會占據(jù)內(nèi)存,如果程序在執(zhí)行過程中不能再使用某個對象,這個對象是徒耗內(nèi)存的垃圾。作為程序員不用關(guān)心回收垃圾對象問題,因為java虛擬機會自動回收垃圾對象所占用的內(nèi)存空間。

[[430263]]

一、垃圾回收機制

1.創(chuàng)建對象就會占據(jù)內(nèi)存,如果程序在執(zhí)行過程中不能再使用某個對象,這個對象是徒耗內(nèi)存的垃圾。作為程序員不用關(guān)心回收垃圾對象問題,因為java虛擬機會自動回收垃圾對象所占用的內(nèi)存空間。

2.當一個對象成為垃圾后會暫時保留在內(nèi)存,如果垃圾堆滿了,Java虛擬機有垃圾回收機制,收集到的垃圾對象所占的內(nèi)存空間,會給垃圾收集器釋放。然而程序會有很多的存儲空間。也可以通過調(diào)用System.gc()方法讓java虛擬機進行垃圾回收,當一個對象在內(nèi)存中被釋放,可以通過finalize()方法會被自動調(diào)用。

3.對象在內(nèi)存狀態(tài)有三種:

可達狀態(tài):當一個對象被創(chuàng)建后,有一個以上的引用變量指向它,這個對象就是處于可達狀態(tài)。

可恢復狀態(tài):沒有任何引用變量指向這個對象。虛擬機進行垃圾回收之前,系統(tǒng)就會調(diào)用所有可恢復狀態(tài)對象finalize()進行清理。如果系統(tǒng)在調(diào)用finalize()方法時重新讓一個引用變量指向這個對象會再次變?yōu)榭蛇_狀態(tài),否則,這個對象就進入不可達狀態(tài)。

不可達狀態(tài):當對象與所有引用變量的關(guān)聯(lián)都被斷掉,系統(tǒng)已經(jīng)調(diào)用所有對象的finalize()方法還是沒有使這個對象變成可達狀態(tài)時,那么這個對象將永久性地失去引用,最后形成不可達狀態(tài)。

4.java虛擬機垃圾回收的過程

例如以下代碼:

  1. class Person{ 
  2. //定義finalize方法在垃圾回收之前被調(diào)用 
  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.         //創(chuàng)建兩個Person的對象 
  12. Person p1=new Person(); 
  13. Person p2=new Person(); 
  14. //把對象設(shè)為null 
  15. p1=null
  16. p2=null
  17. //調(diào)用垃圾回收方法 
  18. System.gc(); 

輸出的結(jié)果是:

  1. 這個對象會被作為垃圾回收... 
  2.  
  3. 這個對象會被作為垃圾回收... 

二、Arrays類

1.Java提供了Arrays類方便用于對數(shù)組進行操作。

2.Arrays有以下功能:

數(shù)組賦值:通過Arrays.fill()方法用于數(shù)組填充;

數(shù)組排序:通過Arrays.sort()方法按數(shù)組所有元素進行排序,按從小到大的順序;

數(shù)組比較:通過Arrays.equals()方法判斷數(shù)組元素值是否相等;

查找數(shù)組元素:Arrays.binarySearch()方法通過二分法在已經(jīng)排好序的數(shù)組中查找指定的元素,并返回該元素的下標;

數(shù)組轉(zhuǎn)換字符串:Arrays.toString()方法將數(shù)組轉(zhuǎn)換為字符串并輸出;

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()方法判斷數(shù)組元素是否相等 
  6.     System.out.println("a1數(shù)組和a2數(shù)組是否相等:" + Arrays.equals(a1 , a2)); 
  7.     int[] b = Arrays.copyOf(a1, 6);  
  8.     System.out.println("a1數(shù)組和b數(shù)組是否相等:" + Arrays.equals(a1 , b)); 
  9.     //toString()方法將數(shù)組轉(zhuǎn)換字符串 
  10.     System.out.println("b數(shù)組的元素為:" + Arrays.toString(b)); 
  11.     //Array.fill()方法數(shù)組賦值 
  12.     Arrays.fill(b , 2, 4 , 1); 
  13.     System.out.println("b數(shù)組的元素為:" + Arrays.toString(b)); 
  14.     //Arrsays.sort()方法數(shù)組排序 
  15.     Arrays.sort(b); 
  16.     System.out.println("b數(shù)組的元素為:" + Arrays.toString(b)); 

輸出的結(jié)果是:

  1. a1數(shù)組和a2數(shù)組是否相等:true 
  2. a1數(shù)組和b數(shù)組是否相等:false 
  3. b數(shù)組的元素為:[5, 2, 3, 9, 0, 0] 
  4. b數(shù)組的元素為:[5, 2, 1, 1, 0, 0] 
  5. b數(shù)組的元素為:[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};//定義一個數(shù)組 
  4.     for(int i=0;i<arr.length;i++) { 
  5.         int temp=i; 
  6.           //數(shù)組中從i開始的最小的元素所在位置的下標(索引)賦值給temp 
  7.         for(int j=i;j<arr.length;j++) { 
  8.             if(arr[j]<arr[temp]) { 
  9.                 temp=j; 
  10.             } 
  11.         } 
  12.         //上面獲取了數(shù)組中從i開始的最小值的下標(索引)temp,索引把第i位上的元素與其進行交換 
  13.         int temp1=arr[i]; 
  14.         arr[i]=arr[temp]; 
  15.         arr[temp]=temp1; 
  16.         System.out.println(arr[i]); 
  17.   } 

輸出結(jié)果是:

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

四、總結(jié)

 

本文主要介紹了java垃圾回收機制、Arrays類、選擇排序法。java的垃圾回收機制簡要的說明對象在內(nèi)存中狀態(tài)分別有三種:可達狀態(tài)、可恢復狀態(tài)、不可達狀態(tài)。通過一個java虛擬機垃圾回收機制的案例幫助大家理解這個過程。Arrays類方便用于對數(shù)組的操作,介紹了Arrays的幾個功能。常用的選擇排序法,首先是找到最小元素的所在位置的索引,將這個元素與第一位上的元素進行交換。通過本文的學習,希望對大家有所幫助!

本文轉(zhuǎn)載自微信公眾號「Java進階學習交流」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系Java進階學習交流公眾號。

 

責任編輯:武曉燕 來源: Java進階學習交流
相關(guān)推薦

2024-02-22 17:15:22

JS垃圾回收機制

2023-05-08 08:21:15

JavaNIO編程

2023-05-12 08:19:12

Netty程序框架

2021-06-30 00:20:12

Hangfire.NET平臺

2020-11-17 11:10:21

CSS選擇器HTML

2020-05-14 13:39:19

Java 垃圾回收機制

2025-03-07 10:04:12

2020-11-10 10:48:10

JavaScript屬性對象

2021-01-29 18:41:16

JavaScript函數(shù)語法

2021-02-02 18:39:05

JavaScript

2021-06-04 09:56:01

JavaScript 前端switch

2023-07-30 15:18:54

JavaScript屬性

2021-01-26 23:46:32

JavaScript數(shù)據(jù)結(jié)構(gòu)前端

2021-02-26 20:01:57

SVG濾鏡元素

2021-03-09 14:04:01

JavaScriptCookie數(shù)據(jù)

2021-06-24 09:05:08

JavaScript日期前端

2021-09-27 09:18:30

ListIterato接口方法

2023-09-06 14:57:46

JavaScript編程語言

2024-01-30 13:47:45

2024-04-19 14:23:52

SwitchJavaScript開發(fā)
點贊
收藏

51CTO技術(shù)棧公眾號