1. 什麼是java的垃圾回收機制內部實現原理是什麼
Java中的對象沒有作用域的概念,只有對象的引用才有作用域。在用new創建出一個對象之後,垃圾回收器就會自動監控該對象,並且會辨別是否需要釋放內存,不需要開發者手動釋放,所以可以很好的防止內存泄漏。
JVM的垃圾回收器採用的是一種分代(generational )回收策略,共分為三個代:
1.Young(年輕代)
年 輕代分三個區。一個Eden區,兩個Survivor區。大部分對象在Eden區中生成。當Eden區滿時,還存活的對象將被復制到Survivor區 (兩個中的一個),當這個Survivor區滿時,此區的存活對象將被復制到另外一個Survivor區,當這個Survivor去也滿了的時候,從第一 個Survivor區復制過來的並且此時還存活的對象,將被復制「年老區(Tenured)」。需要注意,Survivor的兩個區是對稱的,沒先後關 系,所以同一個區中可能同時存在從Eden復制過來 對象,和從前一個Survivor復制過來的對象,而復制到年老區的只有從第一個Survivor去過來的對象。而且,Survivor區總有一個是空的。
2.Tenured(年老代)
年老代存放從年輕代存活的對象。一般來說年老代存放的都是生命期較長的對象。
3.Perm(持久代)
用 於存放靜態文件,如Java類、方法等。持久代對垃圾回收沒有顯著影響,但是有些應用可能動態生成或者調用一些class,例如Hibernate等, 在這種時候需要設置一個比較大的持久代空間來存放這些運行過程中新增的類。持久代大小通過-XX:MaxPermSize=進行設置。
2. jvm如何gc,新生代,老年代,持久代,都存儲哪些東西
虛擬機中共劃分為三個代:年輕代(即新生代)、年老代和持久代。
持久代主要存放的是專Java類的類信息,與垃圾屬收集要收集的Java對象關系不大。
年輕代和年老代的劃分是對垃圾收集影響比較大的。
所有新生成的對象首先都是放在年輕代的
年老代中存放的都是一些生命周期較長的對象。
持久代:用於存放靜態文件,如今Java類、方法等。持久代對垃圾回收沒有顯著影響。
3. java內存模型,年輕代為什麼分為8比1
了解java內存模型對深入了解jvm有很多好處。JMM通過控制主內存與每個線程的本地內存之間的交互,來為開發者提供內存可見性保證。
4. 啟動java程序進程時,輸入以下哪個參數可以實現年輕代
啟動java程序櫻判進程時,輸入-Xmn50M啟動java程序缺頌衫進程時,輸入以下哪個參伏腔數可以實現年輕代參數可以實現年輕代
5. 什麼是java年輕代存放在哪裡
1.寄存器:最快的存儲區, 由編譯器根據需求進行分配,我們在程序中無法控制.
2. 棧:存放基本類型的變數數據和對畢攔象的引用,但對象本身不存放在棧中,而是存放在堆(new 出來的對象)或者常量手歷胡池中(字元串常量對象存放在常量池中。)
3. 堆:存放所有new出來的對象。
4. 靜態域:存放靜態成員(static定義的)
5. 常量池:存放字元串常爛握量和基本類型常量(public static final)。
6. 非RAM存儲:硬碟等永久存儲空間