每一秒钟的时间都值得铭记

0%

Java基础——JDK,JRE,JVM

JDK,JRE,JVM是什么

JDK全称为Java Development Kit(Java开发工具包),提供了Java语言开发的一系列工具,可以用来运行,编译Java程序。
JRE全称为Java Runtime Environment(Java运行环境),是Java语言的运行环境。
JVM全称为Java Virtual Machine(Java虚拟机),是一种计算机平台的规范,是一种虚拟的计算机,JVM是专门用来运行Java程序的,不同的操作系统中,可以安装与操作系统适应的JVM。

注意

  • JDK和JRE并不是包含与被包含的关系,因为JDK是Java开发工具包,而JRE是Java运行环境。如果我们只需要进行Java开发,那么只需要安装JDK即可,同理,如果我们只是需要进行Java程序的运行,那么只安装JRE即可。但是,在一般的JDK中,都会包含JRE,所以我们日常所说的JDK,其实也都是指包含了JRE的JDK
  • 不同的操作系统需要安装相对应的JVM,这也是Java程序为什么可以跨平台运行的原因,因为不同操作系统的JVM屏蔽了Java程序与操作系统之间的联系

JVM的组成

Java虚拟机一共由两部分组成,分别是两个子系统和两个组件。

两个子系统

  • 类加载(Class loader):根据给定的全限定名类名来装载class文件到Runtime data area中的method area。
  • 执行引擎(Execution engine):执行classes中的指令。执行引擎包含即时编译器和垃圾回收器。

两个组件

  • 本地接口(Native Interface):与native libraries交互,是其它编程语言交互的接口。
  • 运行时数据区(Runtime data area):这就是我们常说的JVM的内存。

JVM的内存

JVM的内存,即运行时数据区,分为两个区域,分别是线程隔离数据区线程共享数据区

线程隔离数据区

  • 程序计数器:当前线程所执行的字节码的行号指示器,字节码解析器的工作是通过改变这个计数器的值,来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能,都需要依赖这个计数器来完成。
  • 本地方法栈:与虚拟机栈的作用是一样的,只不过虚拟机栈是服务 Java 方法的,而本地方法栈是为虚拟机调用 Native 方法服务的。
  • Java虚拟机栈:用于存储局部变量表、操作数栈、动态链接、方法出口等信息。

线程共享数据区

  • Java堆:Java 虚拟机中内存最大的一块,是被所有线程共享的,几乎所有的对象实例都在这里分配内存。
  • 方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据。

JVM调优

JVM调优参数 说明
-Xms2g 初始化推大小为 2g
-Xmx2g 堆最大内存为 2g
-XX:NewRatio=4 设置年轻的和老年代的内存比例为 1:4
-XX:SurvivorRatio=8 设置新生代 Eden 和 Survivor 比例为 8:2
–XX:+UseParNewGC 指定使用 ParNew + Serial Old 垃圾回收器组合
-XX:+UseParallelOldGC 指定使用 ParNew + ParNew Old 垃圾回收器组合
-XX:+UseConcMarkSweepGC 指定使用 CMS + Serial Old 垃圾回收器组合
-XX:+PrintGC 开启打印 gc 信息
-XX:+PrintGCDetails 打印 gc 详细信息

思维导图

在这里插入图片描述

坚持原创技术分享,您的支持将鼓励我继续创作!
-------------这是我的底线^_^-------------