ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

JVM快速入门

2022-06-22 17:04:52  阅读:137  来源: 互联网

标签:java 入门 方法 代码 内存 JVM 快速 加载


1. 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)

 

标签:java,入门,方法,代码,内存,JVM,快速,加载
来源: https://www.cnblogs.com/ygmzj/p/16401221.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有