顯示具有 java 標籤的文章。 顯示所有文章
顯示具有 java 標籤的文章。 顯示所有文章

2018/10/8

JVM 效能調教 (一) - JVM基本結構和物件產生流程


  • 本章講述 JVM基本結構和物件產生流程
  • Flow 參考網址

    1. 類裝載器加載Class訊息存放於Method Area
    2. 每一條thread 創建 java Stack 、PC寄存器
    3. 創建實例(new)存放於Heap
    4. 局部變量、參照存放於Java Stack
    5. 垃圾回收系統處理範圍包含直接內存、Method Area、Heap
  • Detail
    • *1 Method Area 
      • 共享空間
      • 存放class訊息、常量池( <= jdk1.6)
      • 指令
        • # -XX:PermSize=5M 初始值 (默認64M)
        • # -XX:MaxPermSize=5M  上限值
      • 在 JDK 1.8已由Metadata area取代(使用直接內存 , 無預設大小)
        • 例外
          • Metaspace exception
        • 指令
          • # -XX:MaxMetaspaceSize
    • *2 PC寄存器
      • 私有空間
      • thread總是在執行方法 , PC寄存器會指向正在執行的指令或undefined(本地方法)
    • *3 Heap
      • 共享空間
      • 包含常量池( >= jdk1.7)
      • 包含新生代 [ eden 、 s0(from)、s1(to) ]
        • 存活區 [ s0(from)、s1(to) ]
      • 包含老年代 [tenured]
      • 每一次回收後 , 保留資料年齡+1
      • 例外
        • java.lang.OutOfMemoryError
      • 指令
        • # -Xmx32M 上限32M
      • 可將處理對象原本存放在Heap的資料 , 改存在 Stack上 , 好處是當函數結束後自動銷毀 , 不須等待回收機制
        • 適用在小而多的對象
        • 處理對象不可被任何 thread 訪問 , 例入區域變數或者無返回值
        • # -server XX:+DoEscapeAnalysis 啟用分析
        • # -XX:+EliminateAllocations 打散在Stack上
    • *4 Java Stack
      • 私有空間
      • 先進後出
      • Native Method Stack用於調用local端lib的方法
      • 每當函數執行時創建一個Stack frame , 存放局部變量表、中間運算結果 , 函數執行完畢移除
      • 例外
        • StackOverflowError Exception
      • 指令
        • # -Xss256K 上限256K
      • 局部變量表的存放空間可重用 , 善用 { } 製造區域變數 , 減少存放空間
    • *5 垃圾回收機制
      • 指令 System.gc();
      • 回收能否成功 , 須看是否有參照=
      • 當變量參照=null {}包含 , 方可回收
      • 指令
        • # -XX:+PrintGC  查看空間大小

2016/7/4

Java Mail 使用GMail (SMTP) Server

  • 最近需要測試寄信的功能 , 使用google 的 server 幫我完成測試 , 將所需要的參數記錄下來
    • mail.smtp.host  =
      smtp.gmail.com
    • mail.smtp.auth => true
    • mail.smtp.starttls.enable => true
    • mail.smtp.port => 587 
    • 個人信箱地址與密碼
  • Exception in thread "main" java.lang.RuntimeException: javax.mail.AuthenticationFailedException
    • 至google 啟動安全性設定



  •   javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 587;
    • 關閉防火牆或檢查proxy




2016/4/28

java -version 異常解決


  • 參考網址
  • 最近要安裝maven , 之前本機裝過jdk 1.7 與 jdk 1.8 , 今天嘗試在cmd 輸入 java -version時 , 發現竟然出現 
    • Error : Registry key 'Software\JavaSoft\Java Runtime Enviroment \ CurrentVersion'
      has value '1.8' but '1.7' is required

  • 不知道是否因為安裝1.7又安裝1.8版, 造成問題 , 還好我依照參考網址所提共的方法已解決掉
    • 在執行輸入視窗輸入regedit
    • HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment
    • 找到一下位置 , 會發現 java runtime environment 的java 版本不同


  • 在current version上右鍵修改成1.7 , 再次輸入java -version 就正常了!!!!





test2