网站首页> 文章专栏> java8 虚拟机JVM有什么更新?
java8 虚拟机JVM有什么更新?
路人王 天津 339 0 0

1.java8 虚拟机有什么更新?

在Java8中,永久代已经被移除,被一个称为元空间的区域所取代。元空间的本质和永久代类似元空间与永久代之间最大的区别在于:  
永久带使用的JVM的堆内存,但是java8以后的元空间并不在虚拟机中而是使用本机物理内存  

2.OOM堆内存溢出OutOfMemoryError?什么是StackOverflowError?又什么方法分析?

堆内存不够,可以通过参数-Xms,-Xmx调整新生区是类的诞生、成长、消亡的区域,一个类在这里产生,应用,最后被垃圾回收器收集,结束生命。  
新生区又分为两部分: 伊甸区(Eden space)和幸存者区(Survivor pace) ,所有的类都是在伊甸区被new出来的。  
幸存区有两个: 0区(Survivor 0 space)和1区(Survivor 1 space)。  
当伊甸园的空间用完时,程序又需要创建对象,JVM的垃圾回收器将对伊甸园区进行垃圾回收(Minor GC),将伊甸园区中的不再被其他对象所引用的对象进行销毁。然后将伊甸园中的剩余对象移动到幸存 0区。  
若幸存 0区也满了,再对该区进行垃圾回收,然后移动到 1 区。那如果1 区也满了呢?再移动到养老区。  
若养老区也满了,那么这个时候将产生MajorGC(FullGC),进行养老区的内存清理。  
若养老区执行了Full GC之后发现依然无法进行对象的保存,就会产生OOM异常“OutOfMemoryError”。  

3.jvm常用的调优参数?

4.类加载器的认识?

Bootstrap  装载原始的类文件 出生文件 打印的话是null
ExtensionClassLoader  
AppClassLoader自己创建的实例  

5.什么是双亲委派机制?沙箱安全?

当一个类收到了类加载请求,首先不会尝试自己去加载这个类,而是委派给父类去完成 如自己创建的String.java会报出找不到main方法错误先去顶部去找,找不到再去下一层  以此类防止恶意代码污染java源代码  

6.寄存器?

指针,方法运行的表,指向执行顺序  
每个线程都有一个程序计数器,线程私有的,为指针,内存非常少,几乎不存在垃圾回收  

7.方法区内存?

供各个线程运行时的内存区域,存储类的结构信息,模板信息,字节码内容  

8.栈Stack 堆heap

 栈管运行,堆管存储  
 8种基本数据类型+对象的引用变量+实例方法  都是在栈内存中分分配的,不存在垃圾回收机制  
 java中的方法,main方法在栈的最底层【栈底】,最先执行,GC垃圾回收最后执行,线程结束,栈释放  
 栈帧中主要保存3类数据:  
    本地变量:输入参数、输出参数,方法内的变量  
    栈操作:记录出栈,入栈的操作  
    栈帧数据:类文件、方法  

java.lang.StackOverflowError 栈溢出,方法的加载撑爆了栈内存

9.堆内存Heap

堆内存大小可以调节,保存所有的引用类型的真是信息
java7以前堆内存分为3个部分
新生区 young/new
养老区 old
永久区 perm
java8以后堆内存分为3个部分
新生区 young/new
养老区 old
元空间 perm
java8以后,元空间并不在虚拟机内存中,而是使用物理机内存
但是默认使用物理机的1/4

10.heap堆的new对象过程是什么?堆内存溢出怎么解决?

new在伊甸园区Eden【新生区】  
永久区存放interface元数据,不会被垃圾回收  

11.对象的生命周期???

12.jvm调参????

-Xms 初始分配大小,默认物理内存的1/64  
-Xmx 最大分配内存,默认物理内存的1/4  
-XX 输出详细的GC日志  
//获取cpu核数  
System.out.println(Runtime.getRuntime().availeProcessors());  
//java虚拟机堆最大内存大小  

System.out.println(Runtime.getRuntime().totalMemory());
//堆内存使用的大小 /1024/1024
System.out.println(Runtime.getRuntime().maxMemory());
//初始内存和最大内存一定是一样大,否则会忽高忽低,避免争抢内存

13.内存配置jvm 堆内存??

idea运行参数 VM options: -Xms1024m -Xmx1024m -XX:+PrintGCDetails  

14.GC垃圾回收比例?

垃圾回收算法:分代收集算法  
                频繁收集young区  
                少收集old区  
                基本不动perm区,元空间  

15.GC,gc fullgc?

16.GC四大回收算法???

引用计数法:一般用不到  
复制算法:年轻代 使用的算法,耗费空间,但是没有内存碎片  
标记清除:老年代 先标记要清除的对象,然后统一回收,节约空间,会产生内存碎片  
标记压缩:再次扫描,往一端滑动存活对象,产生连续的内存区域,没有碎片,但是需要移动对象  

17.JMM java内存模型???

可见性,原子性,有序性,代码演示可见性+原子性代码  
volatile是java虚拟机提供额的轻量级同步机制  
cpu>内存>硬盘  
JMM 抽象模型,工作内存是每个线程私有数据区域,  
java内存模型规定所有的变量都存储在主内存,是共享内存区域,所以所有线程都可以访问  
但是需要,拷贝到自己的工作内存中,操作完后再写会主内存中  
java  

评论

评论  分享  打赏