為了賬號安全,請及時綁定郵箱和手機立即綁定

深入理解JVM讀書筆記(3)-對象的布局和訪問 原創

1. 對象的內存布局 在HotSpot虛擬機中,對象在內存中存儲的布局可以分為3個區域:對象頭(Header),實例數據(Instance Data)和對齊填充(Padding)。 1.1 對象頭 對象頭包含2部分的信息:第一部分用于存儲對象自身的運行時數據,如哈希碼,GC分代年齡,鎖狀態標志,線程持有的鎖,偏向線程ID,偏向時間戳等。這部分數據的長度在32位和64位的虛擬機中分別為32bit和64bit,官方稱它為Mark Word。 Mark Word會復用自己的存儲空間。例如,在32位的HotSpot虛擬機中,如果對象處于未被鎖定

540瀏覽
0推薦
0評論

深入理解JVM讀書筆記(2)-對象的創建 原創

當虛擬機遇到一個new指令時,首先將會去檢查這個指令的參數時候能夠在常量池中定位到一個類的符號引用,并且檢查這個符號引用代表的類是否已經被加載、解析和初始化過。如果沒有,那么就必須先執行相應的類加載過程。 在類加載檢查通過之后,接下來虛擬機將為新生對象分配內存。對象所需的內存的大小在類加載完成后便可以完全確定。為對象分配空間的任務等同于把一塊確定大小的內存從Java堆中劃分出來。 分配對象空間有兩種方式:指針碰撞和空閑列表。 指針碰撞:假設Java堆中內存是絕對規整

568瀏覽
0推薦
0評論

深入理解JVM讀書筆記(1)-運行時數據區 原創

程序計數器 程序計數器是一塊較小的內存空間,可以看作是當前線程所執行的字節碼的行號指示器。 由于Java虛擬機的多線程是通過線程輪流切換并分配處理器執行時間的方式來實現的,在任何一個確定的時刻,一個處理器都只會執行一條線程中的指令。因此,為了線程切換后能恢復到正確的執行位置,每條線程都需要有一個獨立的線程計數器,各條線程之間計數器互不影響,獨立存儲,即線程私有內存。 如果線程正在執行的是一個java方法,這個計數器記錄的是正在執行的虛擬機字節碼指令的地址。如果正在

550瀏覽
0推薦
0評論

《Effective Java》學習筆記(一)——構建器 首發

前言:筆者經歷了人生的洗禮,好久沒有更新文章了,從今天開始繼續寫作大業~~~ 新開一個系列吧(雖然之前的系列有一些不完整),記錄一下學習《Effective Java》的一些理解和實踐。通過學習,再次深切的感受到讀書就是跟一個巨牛逼的大神在交流。 閑話少BB,開始本文的正經內容——構建器。 1. 背景 當我們在設計一個Java的類的時候,我們絕大多數情況下都好考慮類的構造器的實現。一般情況我們有兩種方式實現:帶參數的構造器和不帶參數的構造器(這句話說的簡直滿滿的技術含量,筆者才華

1353瀏覽
2推薦
0評論

Java 多線程(一) 首發

1. 多線程使用方法 使用多線程,絕大部分情況都是通過如下兩種方式實現的,即繼承Thread類或者實現Runnable接口。以下對兩種方式分別進行介紹并比較。 1.1 使用Thread類實現多線程 自定義線程類要繼承 Thread 類,并在 run 方法中實現自己的邏輯。參數的傳遞,可以采用構造方法傳參或者設值的方式。 public class MyThread extends Thread { private String name; public MyThread(String name) { this.name = name; } public void run() { for (int i = 0;i

1073瀏覽
1推薦
0評論

Maven基礎知識總結 首發

對 maven 一直沒有研究過,最近學習了一下Eleven_Lee老師的課程http://www.whaambanhmi.com/learn/443,本文其實是一篇學習筆記。 1. maven坐標 <groupId>: 組織名,一般是網址的反寫+項目名 <artifactId>: 項目名 <version>: 版本號 <packaging>: 打包方式 2. maven常用構建命令 命令 option 含義 mvn compile 編譯 test 測試 package 打包 clean 刪除target目錄(字節碼和測試報告等) install 安裝jar到本地倉庫中...

2149瀏覽
1推薦
1評論

Spring Boot 基礎(1) 原創

1. 介紹 使用Spring Boot開發web應用程序非常方便,只需要進行簡單的配置,可以把更多的精力放在業務邏輯上。 在spring 官網上,根據需求下載Spring Boot的初始工程。鏈接如下: https://start.spring.io/ 拿到初始工程之后,第一件事情,就是搞一個helloworld程序。代碼寫好之后,運行程序。 Spring Boot程序的運行有三種方式: 通過idea直接啟動,右鍵—run 通過maven直接啟動,進入到項目的目錄下,執行 mvn spring-boot:run 進入到項目目錄下,執行 maven install 編輯jar

5965瀏覽
17推薦
0評論

Spring基礎使用(六)-------AOP切面表達式 原創

1. expression表達式 expression表達式分為三部分:指示器,通配符和操作符。 指示器 匹配方法:execution() 匹配注解:@target(),@args(),@within(),@annotation() 匹配包/類型:within() 匹配對象:this(),bean(),target() 匹配參數:args() 通配符 *:匹配任意數量的字符 +:匹配指定類及其子類 ..:匹配任意數量的子包或者參數 運算符 &&:與 ||:或 !:非 2. 示例 匹配方法:execution() execution()匹配方式使用的較為廣泛,其格式如下圖所示,其中修飾符和異常

2259瀏覽
0推薦
0評論

Spring基礎使用(五)-------AspectJ基礎 原創

1、配置使用AspectJ 1、xml中增加AspectJ配置 <aop:aspectj-autoproxy/> 2、下載aspectjweaver.jar 2、注解 @Aspect注解表示被修飾的類為一個切面類。@Aspect注解不能通過類路徑自動檢測發現,需要配合使用@Component或者在xml文件中配置bean。 @PointCut注解用于修飾方法,表示切入點。可以通過&&,||和!等符號,對切入點表達式進行邏輯上的組合,從而形成復雜的表達式。 @Before注解用于修飾方法,表示before advice。 @AfterReturning注解用于修飾方法,表示正常返回通知。可以通過

1352瀏覽
7推薦
2評論

Spring基礎使用(四)-------API方式使用AOP

1、pointCut定義 <bean id="pointCutBean" class="org.springframework.aop.support.NameMatchMethodPointcut"> <property name="mappedNames"> <list> <value>act*</value> </list> </property> </bean> 2、before advice 自定義的before...

809瀏覽
0推薦
0評論

Spring基礎使用(三)-------XML定義AOP的使用

1、AOP實現方式 預編譯方式:AspectJ 動態代理方式(JDK動態代理,CGLIB動態代理):Spring AOP,JbossAOP 2、基本概念 切面(Aspect):對程序進行切割的類,描述切割的點和切割前后需要執行的動作。 連接點(Joinpoint):符合切入點條件的某個具體的點。 通知(Advice):對應切面中要執行的某個動作。 切入點(Pointcut):切面要切割程序的位置。 引入(Introduction): 目標對象(Target Object):被切割的對象 3、通知的類型 前置通知(Before advice):在連接點之前執

1203瀏覽
4推薦
0評論

Spring基礎使用(二)-------Bean的注解方式裝配

1、常用注解 @Component:通用注解 @Repository:一般用于注解持久化層的類 @Service:一般用于注解Service類 @Controller:一般用于注解控制器類。 @Named:與@Component用法相同。 @Autowired:注入對象,用于修飾成員,set方法和構造方法。 @Resource:與@Autowired用法相同 @Inject:與@Autowired用法相同 @Required:修飾set方法,作用與@Autowired相同,注入對象 @Configuration:聲明Bean的配置,與@Bean一起使用。...

3476瀏覽
5推薦
0評論

Spring基礎使用(一)--------IOC、Bean的XML方式裝配

基礎 1、xml文件基礎格式: <?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans...

2224瀏覽
9推薦
0評論

Java設計模式(21)----------中介者模式 原創

介紹 中介者模式是將多個對象之間通信的網狀結構轉化為星狀結構,從而避免多個對象之間的相互耦合,是一種行為型的設計模式。中介者模式的思路就是加入一個中介者對象,所有對象與對象之間的通信,均通過中介者來進行,所以每個對象不再依賴其他的對象。 實現:中介者模式中一般存在多個同事類或者對象,中介者類。 同事類或者對象:通常一個對象的狀態變化或者行為需要對其他同事產生影響。每個同事對象依賴中介者,通過中介者傳達影響。 中介者:被同事類依賴,負責進行同事之間消息的通知

1659瀏覽
6推薦
1評論

Java設計模式(20)----------模板方法模式

介紹 模版方法模式的思想是在抽象類中定義程序的主體框架,在子類中實現具體的細節,是一種行為型設計模式。 實現:模版方法模式中存在兩個角色,抽象類和實現類。在抽象類中,定義了程序的主體結構或者流程,該方法可以設置成final的,這樣子類中就無法重寫。而對于其他的細節的方法定義,則延遲到實現類中。 使用場景: 比如做飯,都需要開火,架鍋,放入食材這樣一套的主體流程,這個可以放在抽象類中。但是開多大的火,使用哪種鍋,放入什么食材,則放在子類中,因為每種菜品的的制作方

1987瀏覽
9推薦
0評論

Java設計模式(19)----------狀態模式

介紹 狀態模式的思想是將狀態以及狀態間的轉換規則(狀態機)和狀態對應的特性行為封裝成為一個對象,使用該對象裝配環境類(context),以達到進行狀態切換的時候能夠自動變更context的某些行為(context的行為主要依靠狀態的行為)。 實現:狀態模式中一般存在三種角色:抽象狀態接口,具體狀態類和環境類(context)。 抽象狀態接口:抽象接口中定義狀態類的通用方法 具體狀態類:實現狀態接口的方法,其中需要包含狀態轉換關系和對應的執行邏輯,并將新的狀態更新到context上。 環境類

1906瀏覽
1推薦
0評論

Java設計模式(18)----------策略模式

介紹 策略模式的思想是提取算法或者行為,對算法或者策略進行封裝成類,并裝配到一個環境類(context)上,使得環境類可以使用不同的算法或者策略來解決不同的問題。策略模式是一種行為型設計模式。 這種設計模式解決的是硬編碼場景中的算法擴展問題。針對某一個場景,可能存在多個算法來進行處理。這多個算法,可能是寫在一個工具類的不同的方法中,也有可能是寫在一個方法中根據不同的條件進行if-else的選擇。但是這樣的處理方式的擴展性非常差勁,如果要增加一種算法,就需要修改工具類。要

1316瀏覽
0推薦
0評論

Java設計模式(17)----------迭代器模式

介紹 迭代器模式的思想是將集合或者容器類中的對象遍歷的職責分離出來,使用迭代器來進行負責。從而能夠在順序遍歷集合或者容器的時候,無需關注其內部的細節和實現。 實現:迭代器模式中的關鍵實現包含一下幾點: 集合或者容器類中包含內部類(迭代器類需要感知集合類的保存數據的形式和集合中元素數量),為迭代器的實現類 集合或者容器類中包含獲取迭代器類對象的方法 迭代器抽象接口中包含hasNext和next方法,對應檢測集合中是否還存在下一個元素的方法和獲取下一個元素的方法。 使用

1716瀏覽
4推薦
0評論

Java設計模式(16)----------命令模式

介紹 命令模式是一種行為型設計模式。在命令模式中,所有的請求都會被包裝成為一個對象。 參考了一下其他關于命令模式的文章,其中有談到說是可以用不同的請求對客戶進行參數化。我對這句話的理解是,因為將請求封裝成為對象,所以客戶的所有操作,其實就是多個命令類的對象而已,即參數化了。 命令模式的最大的特點就是將請求的調用者與請求的最終執行者進行了解耦。調用者需要關心的僅僅是請求對象是否被執行了,對于請求對象是如何執行的,對什么進行操作的,統統不需要關心。 原理:命令

2209瀏覽
2推薦
0評論

Java設計模式(15)----------觀察者模式

介紹 觀察者模式主要解決的問題是一對多的依賴情況下,被依賴對象的消息通知問題,屬于行為型設計模式。在程序設計的時候,有可能多個對象依賴同一個對象。當被依賴的這個對象有狀態變更或者需要向依賴的類進行消息通知的時候,可以使用觀察者模式。 實現方法:在觀察者模式中,一般存在觀察者角色,抽象觀察者角色,被觀察者角色(有的場景還會存在抽象被觀察者的角色)。 觀察者需要依賴被觀察者,根據被觀察者的某些狀態改變而變更自己的狀態。 被觀察者對象中,會保存所有依賴該對象的觀

1472瀏覽
2推薦
0評論
首頁上一頁123下一頁尾頁
意見反饋 幫助中心 APP下載
官方微信
lpl竞猜