首先我们需要了解几个重要概念
JAVA:一种编程语言,提供简单的API
JDK:提供编程开发工具包,编程语言规范,编译器,解释器等。
JRE:java语言别写出来的代码运行的环境。
JVM:JRE中的核心就是JVM (java虚拟机),JAVA程序运行中JVM中。JVM运行在操作系统的上面,操作系统为JVM提供cpu,内存,网络带宽等。
JMM: JAVA MEMORY MODE 内存模型
一、JVM三大核心
(1)jvm类加载机制 (2) jvm运行时数据区(重点) (3)jvm垃圾回收(重点)
1.1 jvm 类加载机制
将我们写的java文件编译成class文件后,在jvm启动或者类运行时由类加载器将class文件加载到内存中。
1.2jvm 运行时数据区(内存区)
是JVM在运行的时候操作所分配的内存区,包括五个部分:方法区,堆,java栈,本地方法栈,程序计数器。
一个jvm(进程)中可以运行多个线程,线程之间可以共享一些成员变量,绿色的部分(方法区和堆)就是线程间共享的数据,黄色是各个线程私有的,每个线程都具有一个java栈,本地方法栈,程序计数器。各个线程间不能访问的。
1.3 执行引擎:负责执行class文件中的字节码指令。
二. JAVA内存结构图
JAVA内存内存结构主要有三大块:方法区,堆内存,栈内存。
堆内存:是java内存中最大的一块分为年轻代和年老代(如果分成三部分年轻代、年老代,永久代(在有的版本中方法区就是永久带)),其中年轻代又分为:Eden,FromSpace(Survivor1),ToSpace(Survivor2),占比8:1:1
对于一个JVM我们通常给定两个概念:一个堆内存,一个栈内存。
堆内存:线程共享
堆:年轻代,年老代
方法区:永久代
栈内存:线程私有
java栈,本地方法区栈,程序计数器
方法区存储类信息,常量,静态变量等信息,线程共享,为与Java堆区分开,方法区的别名也叫(Non-heap非堆)
二,如何根据参数来控制JVM运行时数据区的大小
三.参数配置名称