原创 jdk中LockSupport中park和unpark底層解析

看了一片文章對底層描述的比較清晰,轉載一下 https://kkewwei.github.io/elasticsearch_learning/2018/11/10/LockSupport%E6%BA%90%E7%A0%81%E8%A7%A3

原创 深入理解java虛擬機——垃圾收集器

各種垃圾收集器的配合使用關係 1.Serial收集器 Serial收集器是一個單線程收集器,收集時必須暫停其它所有的工作線程,知道收集結束。 雖然Serial收集器比較古老,但目前依然是虛擬機運行在Client模式下的默認新生代收集器。

原创 深入理解java虛擬機——HotSpot虛擬機對象

1.對象的創建 ①虛擬機遇到一條new指令是,首先將去檢查這個指令的參數是否能在常量池中定位到一個類的符號引用,並且檢查這個符號引用代表的類是否已被加載、解析和初始化過。如果沒有必須先加載類。(後續再補充) ②接下來虛擬機將爲新生對象分配內

原创 protocalbuffer序列化原理

之前項目中使用過protocolbuffer進行序列化,當時就只是使用了protocalbuffer的工具生成了一個類的序列化工具。今天研究公司的序列化項目,發現應該是借用protocalbuffer的序列化思想來實現的,特意研究一下pro

原创 elasticsearch-6.2.3安裝

系統環境:CentOS release 6.6 安裝文件及版本: elasticsearch-6.2.3 jdk:jdk1.8.0_66 分詞器插件:analysis-ik 1.安裝jdk1,8 2.將elasticsearch-6.2.3

原创 java集合大家族

在編寫java程序中,我們最常用的除了八種基本數據類型,String對象外還有一個集合類,在我們的的程序中到處充斥着集合類的身影!java中集合大家族的成員實在是太豐富了,有常用的ArrayList、HashMap、HashSet,也有不常

原创 三種創建Class對象的差異

今日查看java中Class對象的詳解時遇到這個問題。 Class對象的創建有三種方式: 用測試類Test舉例 1. Class.forName("Test") 2. Test.class 3. new Test().getClass()

原创 類型判斷時instanceof和equals的不同用法

接口設計時爲了避免序列化的麻煩,將接口定義爲參數爲map<String,String>類型的接口,但是現在調用時需要轉換當前的實體Bean爲Map,接口接收方再把Map轉換爲另一個Bean實體。過程中的需要對類型判斷轉換。 先貼出兩段方法:

原创 深入理解java虛擬機——垃圾收集器參數總結與GC日誌

垃圾收集相關的常用參數 參數 描述 -XX:+UseSerialGC 虛擬機運行在Client模式下的默認值,打開此開關後,使用Serial+Serial Old的收集器組合進行內存回收 UseParNewGC 打開此

原创 線上數據庫增加字段導致服務請求超時總結

今天的一個需求上線需要在數據庫的某個表中增加一個字段。這個數據庫是服務中一個業務量比較少的數據庫,與主要業務的數據庫是隔離的。執行增加操作後生效比較慢,沒有關注,過了一段時間收到服務超時量報警。 分析原因: 修改的數據庫表數據量比較大,修改

原创 java靜態變量和靜態代碼塊的加載順序

靜態變量的聲明和賦值是分開的,變量名的聲明先加載,賦值是按照代碼順序執行。 public class Test { static { NAME = "xing"; } private static S

原创 深入理解java虛擬機——HotSpot的算法實現

1.枚舉根節點 檢查對象是否被引用需要根據GC Roots節點來查找引用鏈。可作爲GC Roots的節點主要是全局性的引用與執行上下文中,如果要逐個檢查引用,必然消耗時間。 另外可達性分析對執行時間的敏感還體現在GC停頓上,因爲這項分析工作

原创 java8 Lambda表達式詳解

一直對lambda只是使用但是沒有系統的看過用法及原理,總結一下。 java1.8爲了提供lambda的支持提供了一系列的語法支持。 java所有的都離不開對象,lambda表達式也不例外。lambda的本質其實是函數式接口(functio

原创 深入理解java虛擬機——OutOfMemoryError異常

除了程序計數器外都有可能發生OutOfMemoryError異常的可能。 1.java堆溢出 不斷創建對象,並保證GC Root到對象之間有可達路徑來避免垃圾回收機制清楚這些對象,在達到最大堆的容量限制後就會產生內存溢出異常。 堆大小設置爲

原创 java的自動裝箱與拆箱實例分析

在看深入理解java虛擬機中的自動裝箱的陷阱部分,記錄一下。 public class Test { public static void main(String[] args) { try { Integer a = 1