一、JVM 内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 1、虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建。栈里面存着的是一种叫“栈帧”的东西,每个方法会创建一个栈帧,栈帧中存放了局部变量表(基本数据类型和对象引用)、操作数栈、方法 ...
分类:
编程语言 时间:
2018-08-15 21:36:21
阅读次数:
233
为每个对象生命周期不一样,jvm在做内存管理的时候,就帮我们分成了三个区域: 1. 新生代(回收频率高) 新生和老年默认大小比例为1:2 2. 老年代(回收频率低) 最好所有的对象都不要进入老年代,最好新生代能及时回收空对象释放空间供下次使用。 3. 永久代(一般放类的加载信息,常量,静态变量)。 ...
分类:
其他好文 时间:
2018-08-12 18:51:16
阅读次数:
184
jvm五大内存区域(即jvm运行时数据区),描述的是类被加载时,经过解析后,存储到特定的数据区。 方法区:又被称为永久代,用来存储类的信息,例如:方法,方法名,返回值,常量。 堆:存放new出来的对象信息, 成员变量,及成员变量。 程序计数器:指向当前线程正在执行的行号,用来保证线程切换时回到程序调 ...
分类:
其他好文 时间:
2018-08-12 18:43:53
阅读次数:
117
很多人认为方法区(或者hotSpot虚拟机中的永久代)是没有垃圾收集的,java虚拟机规范中确实说过不要求虚拟机在方法区实现垃圾收集,而且在方法区中进行垃圾收集的“性价比”一般比较低:在堆中,尤其是新生代中,常规应用进行一次垃圾收集一般可以回收70% ~ 95%的空间,而永久代的垃圾收集效率远低于此 ...
分类:
其他好文 时间:
2018-08-10 16:02:44
阅读次数:
887
1:HotSpot虚拟机中并不区分虚拟机栈和本地方法栈 而且方法区:永久代(内存管理使用永久代来实现方法区) 类加载过程:加载、验证、准备、解析、初始化 与那些在编译时需要进行连接工作的语言不同,在Java语言里面,类型的加载,连接和初始化过程都是在程序运行期间完成的。加载: 完成三件事1:通过一个 ...
分类:
其他好文 时间:
2018-08-06 21:10:55
阅读次数:
146
注意:在JDK1.8运行常量池移到了堆中,元空间取代了永久代。元空间并不在虚拟机中,而是使用本地内存。 内存结构 程序计数器 当前线程所执行的字节码的行号指示器,保证线程切换后能恢复到原来的执行位置。 栈 线程私有,每个线程对应一个Java虚拟机栈,其生命周期与线程同进同退。每个Java方法在被调用 ...
分类:
其他好文 时间:
2018-08-04 23:25:38
阅读次数:
247
书中写道,如果JDK1.6会返回两个false,JDK1.7运行则会返回一个true一个false。 因为JDK1.6中,intern()方法会把首次遇到的字符串实例复制到永久代中,返回的也是永久代中这个字符串的实例的引用,而StringBulder创建的字符串实例在Java堆上,所以必然不是同一个 ...
分类:
编程语言 时间:
2018-08-02 20:35:23
阅读次数:
177
一、JVM常用启动参数 -Xms:设置堆的最小值。 -Xmx:设置堆的最大值。 -Xmn:设置新生代的大小。 -Xss:设置每个线程的栈大小。 -XX:NewSize:设置新生代的初始值。 -XX:MaxNewSize:设置新生代的最大值。 -XX:PermSize:设置永久代的初始值。 -XX:M ...
分类:
其他好文 时间:
2018-07-30 12:07:07
阅读次数:
194
jstat命令简介: Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap siz ...
分类:
编程语言 时间:
2018-07-25 01:12:01
阅读次数:
303
方法区 线程共享。 当JVM使用类装载器装载某个类时,首先获取class文件,提取该文件的内容信息,将这些信息存储到方法区,最后返回一个class实例。方法区用于存储已经被虚拟机加载的类信息(class)(版本,字段,方法,接口等描述信息),常量,静态变量(static),即时编译期编译后的代码数据等。称为“永久代”。GC在这区域较少出现,内存回收的主要目标是针对常量池的回收和对类的卸载(某个类不
分类:
其他好文 时间:
2018-07-21 17:18:26
阅读次数:
186