1 关于JVM的基本知识点问题整理

来源:互联网 发布:股票诊断软件 编辑:程序博客网 时间:2024/05/17 17:43
Hotspot JRockit 分别2008、2010年被Oracle收购 


守护线程和非守护线程的区别
--守护线程是用来服务非守护线程的。如gc.如果没有非守护线程在运行,JVM将退出


怎么样创建守护线程
--thread.setDaemon(true)必须在thread.start()之前设置,你不能把正在运行的常规线程设置为守护线程,否则会跑出一个IllegalThreadStateException异常,
如果线程是守护线程,则isDaemon方法返回true。


类加载过程
--加载、验证、准备、解析、初始化、使用、销毁


JVM体系结构是怎样的。
-- jvm体系结构主要包含两个子系统和两个组件。
   类加载器子系统、执行引擎子系统
   运行时数据区域组件、本地接口组件
   其中运行时数据区域包括方法区、堆、虚拟机栈、本地方法栈、程序计数器。


   程序计数器:是一块较小的内存空间,它的所用可以看做是当前线程所执行的字节码的行号指示器。
   虚拟机栈:也是线程私有的。它的生命周期与线程相同。虚拟机栈描述的是java方法执行的内存模型。每个方法被执行时都会同时创建一个栈帧用来存储局部变量表、操作栈、动态链接、方法出口等信息。
   本地方法栈:与虚拟机栈相似,区别是本地方法是为虚拟机使用到的本地方法服务。
   方法区:存放了所加载的类的信息(名称、修饰符等)、类中的静态变量、类中定义为final类型的常量、类中的Field信息、类中的方法信息等。
运行时常量池:是方法区的一部分。Class文件中除了有类的版本,字段、方法、接口等描述信息外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后存放到方法区的运行时常量池中。
   堆空间:堆空间是java对象生死存亡的地区,java对象的出生,成长,死亡都在这个区域完成。java程序在运行时创建的所有类实例或数组都放在堆中。
        堆中分年轻代和老年代,年轻代分伊甸园区、幸存0区、幸存1区


jvm参数说明
--
-Xms  堆空间初始化大小
-Xmx  堆空间最大值
-Xmn  堆空间年轻代大小
-XX:NewRatio  堆中年轻代和老年代的大小比例
-Xss  每个线程的堆栈大小
-XX:SurvivorRatio  新生代Surivor区和Eden区的比例
-XX:PermSize 持久代初始化大小
-XX:MaxPermSize  持久代最大值
-XX:MaxTenuringThreshold 新生代经过几次垃圾回收后,进入老年代。
-XX:+HeapDumpOnOurOfMenoryError  该参数表示当JVM内存溢出时,自动在程序目录下生成DUMP文件,通过该文件可以分析出什么原因导致内存溢出的。

Jconsole如何使用
-- 第一步,配置jvm监控参数。
   第二步,运行jvm监控工具Jconsole
   第三步,选择需要监控的jvm


什么是垃圾回收
--JVM中自动检测并移除不再使用的数据对象的这种机制称为垃圾回收。
GC的基本原理
--JVM通过使用垃圾收集器及使用相应的垃圾回收算法将内存中不再使用的对象进行回收。
为什么要垃圾回收
--由于不同JAVA对象存活时间是不一定的,因此,在程序运行一段时间以后,如果不进行垃圾回收,整个程序会因内存消耗尽导致整个程序崩溃。垃圾回收还会整理那些零散的内存碎片,碎片过多最直接的问题就是会导致无法分配大块的内存空间以及降低程序的运行效率。
哪些区域会被GC
--VM栈、本地方法栈以及程序计数器会随方法或者线程的结束而自然被回收,所以这些区域不需要考虑回收问题。
--堆空间和持久代(方法区)是GC回收的重点区域,不同区域对象的收集叫法不一样
  (1)对年轻代的对象的收集称为minor GC
  (2)对老年代的对象的收集称为Full GC。程序中主动调用System.gc()强制执行的GC为Full GC.
  
垃圾收集算法有哪些
--1 标记-清除算法
  2 复制算法
  3 标记-整理算法
  4 分代收集算法
  
垃圾收集器有哪些
-- 1 串行收集器
   2 并行收集器
   3 并发收集器
   
为什么要对jvm调优
-- 所有运行在jvm上的程序都会进行内存分配以及垃圾回收,在这个过程中设置合理的内存大小以垃圾回收算法能显著提高应用的相应速度以及运行效率,相反不合理的jvm参数设置会造成应用程序相应不稳定并导致整个应用程序挂掉。


如何进行jvm调优
-- 不同类型应用程序的jvm参数设置都不一样,如何设置最优的jvm参数不仅需要对gc机制有一定的了解,而且还要反复的试验才能得到最合适的jvm参数值。
   除了了解GC的机制等一些基本调优方法外,往往还需要借助一些监控工具帮助我们进行JVM参数调优。如Jprofiler\VisualVM\Jconsole等,通过工具监控JVM运行时内存分配情况,线程状态\数量,堆空间类\对象数量类型信息等,此外还可以借助分析垃圾回收日志对JVM进行优化。
   
0 0
原创粉丝点击