Effective Java (6) 如何消除到期的對象引用

一、引言很多人可能在想這麼一個問題:Java有記憶體回收機制,那麼還存在記憶體泄露嗎?答案是肯定的,所謂的記憶體回收GC會自動管理記憶體的回收,而不需要程式員每次都手動釋放記憶體,但是如果存在大量的臨時對象在不需要使用時並沒有取消對它們的引用,就會吞噬掉大量的記憶體,很快就會造成記憶體溢出。二、Java的記憶體回收機制Java中的對象是在堆中分配,對象的建立有2中方式:new或者反射。對象的回收是通過垃圾收集器,JVM的垃圾收集器簡化了程式員的工作,但是卻加重了JVM的工作,這是Java程式運行

Effective Java (5) 避免建立不必要的對象

一、引子一般來說,最好能重用對象而不是每次需要的時候就建立一個相同功能的新對象,特別是當對象不可變時,它始終可以被重用的。重用對象對程式效能起到重要作用。二、重用不可變對象對於同時提供了靜態Factory 方法和構造器的不可變類,通常可以使用靜態Factory 方法而不是構造器,以避免建立不必要的對象。Boolean b1 = Boolean.valueOf("test"); // 使用靜態Factory 方法(good) Boolean b2 = new Boolean(

Effective Java (4) 通過私人構造器強化不可執行個體化的能力

一、背景對於有些工具類如java.lang.Math、java.util.Arrays等,它們只包含靜態方法和靜態域欄位,對於這樣的類執行個體化沒有什麼任何意義。但在實際使用中,如果不加任何特殊處理,這樣的類還是可以像其他類一樣可以被執行個體化。二、處理辦法將建構函式設定為private,這樣外部類無法執行個體化該類,同時在這個私人的建構函式中直接拋出異常,從而避免在類的內部執行個體化。public class UtilityClass { //

Effective Java(3) 用私人構造器或者枚舉類型強化Singleton屬性

一、背景所謂的Singleton是指僅僅被執行個體化一次的類,Singleton通常被用來代表那些本質上唯一的系統組件。實現Singleton有以下三種方法:①. 私人構造器,公有靜態final域。②. 私人構造器,公有靜態Factory 方法。③. 單元素枚舉類型(首選)。二、私人構造器,公有靜態final域public class Singleton1 { public static final Singleton1 INSTANCE = new Singleton1(

Effective Java (2) 遇到多個構造器參數時要考慮用構建器

一、背景對於有多個選擇性參數的類,我們一般通過什麼辦法傳遞參數呢?這裡提供了三種辦法:①. 重疊構造器模式②. JavaBeans模式③.

Effective Java (1) 考慮用靜態Factory 方法代替構造器

一、前言從今天開始計劃用一個月的時間,通過寫讀書筆記的方式來記錄閱讀這本Java領域經典中的經典書籍 - Effective Java過程中自己所思所想,以備以後查閱,同時分享出去也希望可以協助到其他人,廢話不多說,現在開始第一篇:建立和銷毀對象。二、考慮用靜態Factory 方法代替構造器①. 一般我們有什麼辦法可以建立對象呢?方法1: 使用類公有構造器。方法2:使用類的靜態方法返回一個執行個體。②. 使用靜態方法建立對象有什麼優點?優點1: 靜態Factory

java map按照value值來比較大小並且返回最終結果

package com.zuidaima.util; import java.util.Comparator; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; public class ValueComparator implements Comparator<Long> { Map<Long, Double>

JAVA函數實現任意給定一組數, 找出任意數相加之後的結果為35

用JAVA寫一個函數。功能如下:任意給定一組數,例如{12,60,-8,99,15,35,17,18},找出任意數相加之後的結果為35(任意設定)的情況.可以遞迴演算法來解:package test1; import java.util.Arrays; public class demo { public static void main(String[] args) { String str = "12,60,-8,99,15,35,1

java實現歸併排序和樹形排序(錦標賽制):java字串分隔或的形式

String[] b=str.split("query|,");//query分隔或者逗號分隔 歸併排序,遞迴實現public class MergeSort2 {// 對data數組中的 [a,b) 區間的資料進行歸併排序,// 排序結束後,[a,b)間資料處於升序有序狀態static void mergeSort(int[] data, int a,int b){if (a >= b) return;int

Java進階學習(五) 多線程

多線程多線程(multiple

Java進階學習(四) RTTI

運行時類型識別(RTTI, Run-Time Type Identification)是Java中非常有用的機制,在Java運行時,RTTI維護類的相關資訊。多態(polymorphism)是基於RTTI實現的。RTTI的功能主要是由Class類實現的。Class類Class類是"類的類"(class of classes)。如果說類是對象的抽象和集合的話,那麼Class類就是對類的抽象和集合。每一個Class類的對象代表一個其他的類。比如下面的程式中,Class類的對象c1

Java進階學習(三) IO基礎

電腦最重要的功能是處理資料。一個有用的電腦語言需要擁有良好的IO功能,以便讓未處理的資料流入程式,讓已處理的資料流出。與其他語言相比,Java的IO功能顯得複雜。在其他語言中,許多IO功能(比如讀取檔案),是被封裝好的,可以用一兩行程式實現。在Java中,程式員往往需要多個層次的裝飾(decoration),才能實現檔案讀取。相對的複雜性帶來的好處是IO的靈活性。在Java中,程式員可以控制IO的整個流程,從而設計出最好的IO方式。我們將在下文看到更多。IO樣本下面是我用於示範的檔案file.t

Java進階學習(二) 異常處理

程式很難做到完美,不免有各種各樣的異常。比如程式本身有bug,比如程式列印時印表機沒有紙了,比如記憶體不足。為瞭解決這些異常,我們需要知道異常發生的原因。對於一些常見的異常,我們還可以提供一定的應對預案。C語言中的異常處理是簡單的通過函數傳回值來實現的,但傳回值代表的含義往往是由慣例決定的。程式員需要查詢大量的資料,才可能找到一個模糊的原因。物件導向語言,比如C++, Java,

Java進階學習(一) String類

之前的Java基礎系列中討論了Java最核心的概念,特別是物件導向的基礎。在Java進階中,我將對Java基礎進行補充,並轉嚮應用層面。大部分程式設計語言都能夠處理字串(String)。字串是有序的字元集合,比如"Hello World!"。在Java中,字串被儲存為String類對象。調用字串對象的方法,可以實現字串相關的操作。String類包含在java.lang包中。這個包會在Java啟動的時候自動import,所以可以當做一個內建類(built-in

Java網路學習(三) Servlet沙拉

Servlet開胃酒中介紹了Servlet的基本流程和設定方式。這裡,我們將看一些Servlet執行個體。這些執行個體都是HTTP通訊(參考HTTP協議:http://www.cnblogs.com/vamei/archive/2013/05/11/3069788.html)中的常見問題。我們通過操作request和response,來實現HTTP協議的功能。產生頁面Servlet的目的是動態產生頁面。比如下面的例子:package foo; import

Java網路學習(二) Servlet開胃酒

在Tomcat初次嘗試中,我們搭建了用於測試Servlet和JSP的基本環境。我們現在要轉向網路應用的具體開發。廚師Web伺服器的基本工作方式是請求-處理-回複。請求和回複是在網路上,以HTTP協議為基礎的通訊(參考HTTP協議)。請求是客戶點菜,回複像是服務員上菜,而處理則是在後廚中,廚師根據請求的菜單,準備菜品的過程。廚師通常是伺服器上的一個應用程式。這個應用程式可以提取請求中的資訊,並根據這些資訊準備回複。這樣的應用程式可以是許多中語言寫成的,比如C, C++, Perl, Ruby,

Java網路學習(一) Tomcat初次嘗試

Tomcat是一套開源軟體,它由Apache Software Foundation(ASF)開發,用於實現Java Servlet和JavaServer Page (JSP)技術。Tomcat是雄性貓的意思。在O‘Reilly的動物書中,貓已經被用作另一本書的封面。所以,Tomcat的O'Reilly書的封皮是雪豹(Snow Leopard):貓咪變雪豹Tomcat的功能Tomcat的核心是一個Servlet

查看tomcat開機檔案都幹點啥:Bootstrap.java

在上一章查看tomcat開機檔案都幹點啥---catalina.bat,說了在catalina.bat中都走了什麼流程,最重要的是,我們得出了如下這段命令:_EXECJAVA=start "Tomcat" "E:\Program Files\Java\jdk1.7.0_40\bin\java" JAVA_OPTS=

SAE Java環境訪問https報錯:java.security.InvalidAlgorithmPara

使用SAE的Java一直很順利,在本地Tomcat測試沒有問題,上傳到SAE後就報這個錯,搜尋了一下,大體上是指環境方面的問題,這裡分享一下。訪問地址:https://api.weibo.com/2/users/show.json錯誤資訊:java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty on Linux, or why is the default

Java枚舉的反向尋找

java的枚舉常常被用來替代常量值,每個枚舉值代表一個特定的常數。在還原序列化時有常常需要用到常數到枚舉的轉換,這就涉及到枚舉的反向尋找。1、從枚舉名反向尋找枚舉這種方法是最先使用也最為簡便的可以用到枚舉的靜態方法valueOf(String name)valueOf方法為內建方法,使用簡便,但在尋找不到枚舉時會拋出異常。熟悉異常的同學可能知道異常拋出時,需要收集虛擬機器的呼叫堆疊上下文資訊,對效能影響較大。使用時,常常需要使用這麼一個還原序列化尋找方法E find(String name,

總頁數: 4058 1 .... 2746 2747 2748 2749 2750 .... 4058 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.