tomcat/java

49 lines
3.2 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

一、JVM 虚拟机常识
作为了解JVM 虚拟机的开始。我们很有必要弄明白以下两个问题。
1.什么是JAVA虚拟机
所谓虚拟机就是一台虚拟的计算机。他是一款软件用来执行一系列虚拟计算机指令。大体上虚拟机可以分为系统虚拟机和程序虚拟机。大名鼎鼎的VisualBox、VMware就属于系统虚拟机。他们完全是对物理计算机的仿真。提供了一个可以运行完整操作系统的软件平台。
程序虚拟机的典型代表就是Java虚拟机它专门为执行单个计算机程序而设计在Java虚拟机中执行的指令我们称为Java字节码指令。无论是系统虚拟机还是程序虚拟机在上面运行的软件都限制于虚拟机提供的资源中。
2.JAVA 如何做到跨平台
同一个JAVA程序(JAVA字节码的集合)通过JAVA虚拟机(JVM)运行于各大主流操作系统平台
比如Windows、CentOS、Ubuntu等。程序以虚拟机为中介来实现跨平台。
3.虚拟机基本结构
我们要对JVM虚拟机的结构有一个感性的认知。毕竟我们不是编程人员认知程度达不到那么深入。
1)、类加载子系统
负责从文件系统或者网络中加载Class信息加载的类信息存放于一块称为方法区的内存空间。除了类信息外方法区中可能还会存放运行时常量池信息包括字符串字面量和数字量。
2)、Java堆
在虚拟机启动的时候建立它是Java程序最主要的内存工作区域。几乎所有的Java对象实例都放Java堆中。堆空间是所有线程共享的这是一块与Java应用密切相关的内存区间。
3)、Java的NIO库(直接内存)
允许Java程序使用直接内存。直接内存是在Java堆外的、直接向系统申请的内存区间。通常访问直接内存的速度会优于Java堆。因此出于性能考虑读写频繁的场合可能会考虑使用直接内存。由于直接内存在Java堆外因此它的大小不会受限于Xmx指定的最大堆大小。但是系统内存是有限的Java堆和直接内存的总和依然受限于操作系统能给出的最大内存。
JAVA写一个项目 服务器上运行足够的内存100%以上
4)、垃圾回收系统
垃圾回收系统是Java虚拟机的重要组成部分垃圾回收器可以对方法区、Java堆和直接内存进行回收。
5)、Java栈
每一个Java虚拟机线程都有一个私有的Java栈。一个线程的Java栈在线程创建的时候被创建。Java保存着帧信息Java栈中保存着局部变量、方法参数同时和Java方法的调用、返回密切相关。
4.虚拟机堆内存结构
JVM中堆空间可以分成三个大区年轻代、老年代、永久代(方法区)。
新生代(年轻代):新生区
类在这里产生和应用最后被垃圾回收。所有的类在伊甸区被new出来当伊甸区满了GC会对该区不用的对象销毁剩余有用的转到幸存区。
老年代:老年区(养老区)
用于存放生成周期比较长的对象。
永久代:永久区
存放JDK自带的class,interface。