java 内存模型堆和本地方法
生活随笔
收集整理的這篇文章主要介紹了
java 内存模型堆和本地方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、java內存模型堆
- 1、堆特點
- 2、堆異常
- 3、堆的性能調優參數
- 二、本地方方法
一、java內存模型堆
1、堆特點
堆是用于存放對象的內存區域。因此,它是垃圾收集器(GC)管理的主要目標。
- 堆在邏輯上劃分為“新生代”和“老年代”,在細致一點可分為Eden空間、From Survivor空間、To Survivor。由于JAVA中的對象大部分是朝生夕滅,還有一小部分能夠長期的駐留在內存中,為了對這兩種對象進行最有效的回收,將堆劃分為新生代和老年代,并且執行不同的回收策略。不同的垃圾收集器對這2個邏輯區域的回收機制不盡相同。這塊以后會細講。
- 內存的分配角度看,線程共享的java堆可能劃分出多個線程私有的分配緩沖區。
- 堆一般實現成可擴展內存大小,使用“-Xms”與“-Xmx”控制堆的最小與最大內存,擴展動作交由虛擬機執行。但由于該行為比較消耗性能,因此一般將堆的最大最小內存設為相等。
- 堆占用的內存并不要求物理連續,只需要邏輯連續即可。
- 堆的生命周期是隨著虛擬機的啟動而創建。
- 堆是所有線程共享的內存區域,因此每個線程都可以拿到堆上的同一個對象。
2、堆異常
當堆無法分配對象內存且無法再擴展時,會拋出OutOfMemoryError異常。
package com.sl.common;import java.util.ArrayList; import java.util.List;/*** @author shuliangzhao* @Title: Test* @ProjectName spring-boot-learn* @Description: TODO* @date 2019/9/24 19:41*/ public class Test {public static void main(String[] args) {List<Object> list = new ArrayList<>();while (true) {list.add(new Test());}} }上述代碼中對象不斷的被創建而不進行引用釋放,導致GC無法回收堆內存,最終OutOfMemoryError。
3、堆的性能調優參數
- -Xms and -Xmx (or: -XX:InitialHeapSize and -XX:MaxHeapSize):指定JVM的初始和最大堆內存大小,兩值可以設置相同,以避免每次垃圾回收完成后JVM重新分配內存。
- Xmn:設置年輕代大小。整個堆大小=年輕代大小 + 年老代大小 + 持久代大小。所以增大年輕代后,將會減小年老代大小。此值對系統性能影響較大,Sun官方推薦配置為整個堆的3/8。
- -Xss:設置每個線程的堆棧大小。JDK5.0以后每個線程堆棧大小為1M。在相同物理內存下,減小這個值能生成更多的線程。但是操作系統對一個進程內的線程數還是有限制的,不能無限生成,經驗值在3000~5000左右。
- -XX:+HeapDumpOnOutOfMemoryError and -XX:HeapDumpPath:讓JVM在發生內存溢出時自動的生成堆內存快照(堆內存快照文件有可能很龐大,推薦將堆內存快照生成路徑指定到一個擁有足夠磁盤空間的地方。)
- -XX:PermSize and -XX:MaxPermSize:設置永久代大小的初始值和最大值(默認:最小值為物理內存的1/64,最大值為物理內存的1/16,永久代在堆內存中是一塊獨立的區域,這里設置的永久代大小并不會被包括在使用參數-XX:MaxHeapSize 設置的堆內存大小中)
- -XX:PretenureSizeThreshold :令大于這個設置值的對象直接在老年代分配。這樣做的目的是避免在Eden區及兩個Survivor區之間發生大量的內存復制
二、本地方方法
本地方法棧的功能和特點類似于虛擬機棧,均具有線程隔離的特點以及都能拋出StackOverflowError和OutOfMemoryError異常。不同的是,本地方法棧服務的對象是JVM執行的native方法,而虛擬機棧服務的是JVM執行的java方法。如何去服務native方法?native方法使用什么語言實現?怎么組織像棧幀這種為了服務方法的數據結構?虛擬機規范并未給出強制規定,因此不同的虛擬機實可以進行自由實現,我們常用的HotSpot虛擬機選擇合并了虛擬機棧和本地方法棧。
總結
以上是生活随笔為你收集整理的java 内存模型堆和本地方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 内存模型程序计数器和虚拟机栈
- 下一篇: (error) CROSSSLOT Ke