偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

[[430263]]

一、垃圾回收機(jī)制

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

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

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

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

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

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

4.java虛擬機(jī)垃圾回收的過(guò)程

例如以下代碼:

  1. class Person{ 
  2. //定義finalize方法在垃圾回收之前被調(diào)用 
  3. public void finalize(){ 
  4.         System.out.println("這個(gè)對(duì)象會(huì)被作為垃圾回收..."); 
  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)建兩個(gè)Person的對(duì)象 
  12. Person p1=new Person(); 
  13. Person p2=new Person(); 
  14. //把對(duì)象設(shè)為null 
  15. p1=null
  16. p2=null
  17. //調(diào)用垃圾回收方法 
  18. System.gc(); 

輸出的結(jié)果是:

  1. 這個(gè)對(duì)象會(huì)被作為垃圾回收... 
  2.  
  3. 這個(gè)對(duì)象會(huì)被作為垃圾回收... 

二、Arrays類

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

2.Arrays有以下功能:

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

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

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

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

數(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.首先找到最小元素所在位置的下標(biāo)(索引),將這個(gè)元素與第一位上的元素進(jìn)行交換。

2.選擇排序法案例

  1. public static void main(String[] args) { 
  2. // TODO Auto-generated method stub 
  3. int arr[]= {12,31,25,7,38};//定義一個(gè)數(shù)組 
  4.     for(int i=0;i<arr.length;i++) { 
  5.         int temp=i; 
  6.           //數(shù)組中從i開始的最小的元素所在位置的下標(biāo)(索引)賦值給temp 
  7.         for(int j=i;j<arr.length;j++) { 
  8.             if(arr[j]<arr[temp]) { 
  9.                 temp=j; 
  10.             } 
  11.         } 
  12.         //上面獲取了數(shù)組中從i開始的最小值的下標(biāo)(索引)temp,索引把第i位上的元素與其進(jìn)行交換 
  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垃圾回收機(jī)制、Arrays類、選擇排序法。java的垃圾回收機(jī)制簡(jiǎn)要的說(shuō)明對(duì)象在內(nèi)存中狀態(tài)分別有三種:可達(dá)狀態(tài)、可恢復(fù)狀態(tài)、不可達(dá)狀態(tài)。通過(guò)一個(gè)java虛擬機(jī)垃圾回收機(jī)制的案例幫助大家理解這個(gè)過(guò)程。Arrays類方便用于對(duì)數(shù)組的操作,介紹了Arrays的幾個(gè)功能。常用的選擇排序法,首先是找到最小元素的所在位置的索引,將這個(gè)元素與第一位上的元素進(jìn)行交換。通過(guò)本文的學(xué)習(xí),希望對(duì)大家有所幫助!

本文轉(zhuǎn)載自微信公眾號(hào)「Java進(jìn)階學(xué)習(xí)交流」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系Java進(jìn)階學(xué)習(xí)交流公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: Java進(jìn)階學(xué)習(xí)交流
相關(guān)推薦

2024-02-22 17:15:22

JS垃圾回收機(jī)制

2023-05-08 08:21:15

JavaNIO編程

2023-05-12 08:19:12

Netty程序框架

2021-06-30 00:20:12

Hangfire.NET平臺(tái)

2020-11-17 11:10:21

CSS選擇器HTML

2021-01-26 23:46:32

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

2023-07-30 15:18:54

JavaScript屬性

2020-12-08 08:09:49

SVG圖標(biāo)Web

2021-05-18 08:30:42

JavaScript 前端JavaScript時(shí)

2021-03-09 14:04:01

JavaScriptCookie數(shù)據(jù)

2024-04-19 14:23:52

SwitchJavaScript開發(fā)

2021-03-05 18:04:15

JavaScript循環(huán)代碼

2024-01-30 13:47:45

2021-09-27 09:18:30

ListIterato接口方法

2021-02-26 20:01:57

SVG濾鏡元素

2021-06-24 09:05:08

JavaScript日期前端

2023-09-06 14:57:46

JavaScript編程語(yǔ)言

2020-11-10 10:48:10

JavaScript屬性對(duì)象

2021-01-29 18:41:16

JavaScript函數(shù)語(yǔ)法

2021-06-04 09:56:01

JavaScript 前端switch
點(diǎn)贊
收藏

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