JVM快速入门(jvm jit)

  本篇文章为你整理了JVM快速入门(jvm jit)的详细内容,包含有jvm教程 jvm jit jvm入门到精通 jvm juc JVM快速入门,希望能帮助你了解 JVM快速入门。

  2. JVM体系结构

  

  

  

  3. 类加载器

  类加载器的作用:加载class文件

  加载器:①.ApplicationClassLoader应用程序类加载器,主要负责加载当前应用classpath路径下的所有类;

   ②.ExtentionClassLoader扩展类加载器,主要负责加载\lib\ext目录下的jar包和class文件;

   ③.BootstrapClassLoader启动类加载器,主要负责加载\lib下的tr、resources.jar、charset.jar和class等;

   ④.UserClassLoader用户自定义类加载器,可加载指定路径的class文件。

  

  4. 双亲委派机制

  类加载器收到类加载的请求,会将请求向上委托给父类加载器区完成,一直到BootstrapClassLoader启动类加载器。

  启动类加载器收到加载类的请求会检查这个类能否加载,能够加载则完成。不能加载就抛出异常,通知子加载器进行加载。

  

  

  5. 沙箱安全机制

   ①. Java安全模型的核心就是java沙箱(sandbox),什么是沙箱?沙箱是限制程序访问系统资源的环境。沙箱机制就是将java代码

  限定在JVM虚拟机特定的运行范围中,并且严格限制代码对本地资源(CPU、内存、文件系统、网络)的访问,通过这样的措施

  来保证对代码的有效隔离,防止对本地系统造成破坏。

   ②. 在java中将执行程序分为本地代码和远程代码两类,本地代码默认是可信任的,而远程代码则被视为不受信任的。对于授信的

  本地代码来说,可以访问一切系统资源。

  

  

  6. native

  凡是带有native关键字的代码,说明java代码达不到了,需要调用底层c语言的库。

  本地方法库的作用:扩展java的使用,融合不同的编程语言为Java所用!在java诞生的时候,c、c++横行,

  想要立足必须调用c、c++的程序,所以它在内存区域中专门开辟了一块标记区域:Native Method Stack,

  登记native方法。在最终执行的时候,加载本地方法库中的方法。

  

  7. 方法区

  Method Area方法区:方法区是被所有线程共享,所有字段和方法字节码,以及一些特殊方法,如构造函数,接口代码

  也在此定义。简单说,所有定义的方法的信息都保存在该区域,该区域是属于共享区间;静态变量、常量、类信息(

  构造方法、接口定义)、运行时的常量池存在方法区中,但是实例变量存在堆内存中,和方法区无关。

  

  8. 栈

  略

  

  9.堆

  一个JVM只有一个堆(Heap)内存,堆内存的大小是可以调节的。

  类加载器读取到类文件后,一般会把什么东西放到堆中?类,方法,常量,变量,保存我们所有引用类型的真实对象。

  堆内存中还可以细分为三个区域: 新生区(Eden、ServivorTo、ServivorFrom)、养老区(Old)、永久区(Perm)

  GC垃圾回收,主要是在伊甸园区和养老区。

  

  

  10. 新生区、永久区、堆内存调优

  新生区: ①类诞生和成长的地方,甚至死去。

   ②伊甸园,所有的对象都是在伊甸园区new出来的

   ③幸存者区

  真理: 经过研究发现,99%的对象都是临时对象!

  永久区: 这个区域存储的是java运行时的一些环境或类信息,这个区域不存在垃圾回收,关闭JVM虚拟机就会释放这个区域的内存。

  GC分为两类: ①轻GC(针对新生代,偶尔针对下幸存区) ②重GC(全局GC,所有东西都释放一遍,释放内存)

  

  11. 使用Jprofiler工具分析OOM原因

  Jprofiler作用: 分析Dump内存文件,快速定位内存泄漏;获得堆中的数据;获得大的对象

  -Xms 设置初始化内存分配大小(默认为1/64)

  -Xmx 设置最大分配内存(默认1/4)

  

  以上就是JVM快速入门(jvm jit)的详细内容,想要了解更多 JVM快速入门的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: