JVM
文章平均质量分 97
菜鸡小王子
这个作者很懒,什么都没留下…
展开
-
Java对象的访问定位
一、引言建立对象是为了使用对象,我们的Java程序需要通过栈上的reference数据来操作堆上的具体对象。由于reference类型在Java虚拟机规范中只规定了一个指向对象的引用,并没有定义这个引用应该通过何种方式去定位、访问堆中的对象的具体位置,所以对象访问方式也是取决于虚拟机实现而定的。对象的访问涉及到三个区域:栈、堆、方法区例如定义一个对象: Object refere原创 2017-07-09 14:49:33 · 1033 阅读 · 0 评论 -
为什么只需要一个eden而需要两个survivor?
在JVM的新生代内存中,为什么除了Eden区,还要设置两个Survivor区?1 为什么要有Survivor区先不去想为什么有两个Survivor区,第一个问题是,设置Survivor区的意义在哪里? 如果没有Survivor,Eden区每进行一次Minor GC,存活的对象就会被送到老年代。老年代很快被填满,触发Major GC(因为Major GC一般伴随着Minor GC,也转载 2017-09-19 18:51:50 · 5238 阅读 · 6 评论 -
常用的内存调试工具
常用的内存调试工具:jps、jmap、jhat、jstack、jconsole,jstat:jps:查看虚拟机进程的状况,如进程ID。jmap: 用于生成堆转储快照文件(某一时刻的)。jhat:对生成的堆转储快照文件进行分析。jstack:用来生成线程快照(某一时刻的)。生成线程快照的主要目的是定位线程长时停顿的原因(如死锁,死循环,等待I/O 等),通过查看各个线程的调用原创 2017-09-11 11:42:38 · 1029 阅读 · 0 评论 -
JVM常见的启动参数
-Xms:设置堆的最小值。-Xmx:设置堆的最大值。-Xmn: 设置新生代的大小。-Xss:设置每个线程的栈大小。-XX:NewSize:设置新生代的初始值。-XX:MaxNewSize :设置新生代的最大值。-XX:PermSize:设置永久代的初始值。-XX:MaxPermSize:设置永久代的最大值。-XX:SurvivorRatio:年轻代中Eden原创 2017-09-11 11:38:43 · 479 阅读 · 0 评论 -
如何减少GC出现的次数
(1)对象不用时最好显式置为Null一般而言,为Null 的对象都会被作为垃圾处理,所以将不用的对象显式地设为Null,有利于GC 收集器判定垃圾,从而提高了GC 的效率。(2)尽量少用System.gc()此函数建议JVM 进行主GC,虽然只是建议而非一定,但很多情况下它会触发主GC,从而增加主GC 的频率,也即增加了间歇性停顿的次数。(3)尽量少用静态变量静态变量属于全原创 2017-09-11 11:20:25 · 1017 阅读 · 0 评论 -
内存泄露和内存溢出
内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。内存泄露会最终会导致内存溢出!内存溢出的原因分析:内存泄露是指无用对象(不再使用的对象)持续占原创 2017-08-20 14:18:00 · 221 阅读 · 0 评论 -
minor gc和full gc
新生代(Eden + From Survior + To Survior)老年代:数组和大的对象,新生代中发生minor gc超过一定次数(默认15)的对象堆中:新生代+老年代方法区:永久代minor gc:发生在新生代中,当Eden区满的时候发生,Survior满的时候不会引发gcfull gc:指发生在老年代中的GC(1)当老年代满时会引发Full GC,Full GC原创 2017-07-23 20:33:44 · 556 阅读 · 0 评论 -
JVM类加载机制
类加载机制:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。原创 2017-07-09 22:22:51 · 267 阅读 · 0 评论 -
内存管理工具Memory Analyzer的使用
转载出自于内存管理工具Memory Analyzer的使用安装关于Eclipse Memory Analyzer的安装,网上有很多教程,我选择的是直接通过Eclipse插件的形式安装最新的Memory Analyzer。步骤如下:打开eclipse->Help->Install new software->work with右边的Add...显示下图: 这里使用转载 2017-08-20 14:33:02 · 1581 阅读 · 0 评论 -
JVM GC回收算法
转载:生命壹号:http://www.cnblogs.com/smyhvae/文章来源:http://www.cnblogs.com/smyhvae/p/4744233.html本文主要内容:GC的概念GC算法 引用计数法(无法解决循环引用的问题,不被java采纳) 根搜索算法 现代虚拟机中的垃圾搜集算法转载 2017-07-26 16:14:49 · 315 阅读 · 0 评论 -
Java程序编译和运行的过程
两个过程:源文件由编译器编译成字节码文件(ByteCode)JVM执行字节码文件编译:源文件被编译成.class文件。编译后的字节码文件格式主要分为两种:常量池:记录代码出现过的所有token(类名、成员变量名、符号引用(方法引用,成员变量引用)等)字节码:类中各个方法的字节码运行:类的加载+类的执行参考:类的编译运行原创 2017-07-26 10:36:05 · 372 阅读 · 0 评论 -
Java对象创建的具体过程
Java是一门面向对象的编程语言,在Java程序运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象(例如克隆、反序列化)通常仅仅是一个new关键字而已,而在虚拟机中,对象(文中讨论的对象限于普通Java对象,不包括数组和Class对象等)的创建又是怎样一个过程呢?原创 2017-07-09 14:31:59 · 3342 阅读 · 2 评论 -
JAVA垃圾回收算法
在确定了哪些垃圾可以被回收后,垃圾收集器要做的事情就是开始进行垃圾回收,但是这里面涉及到一个问题是:如何高效地进行垃圾回收。由于Java虚拟机规范并没有对如何实现垃圾收集器做出明确的规定,因此各个厂商的虚拟机可以采用不同的方式来实现垃圾收集器,所以在此只讨论几种常见的垃圾收集算法的核心思想。原创 2017-07-09 16:25:15 · 290 阅读 · 0 评论 -
Java垃圾回收策略
垃圾回收策略: 哪些内存需要回收?什么时候回收?如何回收?原创 2017-07-09 15:05:53 · 506 阅读 · 0 评论 -
Java内存溢出异常(OOM)完全指南
本文分析什么情况会导致OOM出现,提供示例代码的同时为您提供解决指南。转载 2017-07-13 19:21:37 · 445 阅读 · 0 评论 -
类加载顺序
静态变量、静态块、构造块、构造函数执行顺序先看一个demo:Parent类:/** * Created by flh on 2017/8/20. */public class Parent { Parent(){ System.out.println("我是父类构造函数"); } static { System.out.pr原创 2017-08-20 23:01:30 · 222 阅读 · 0 评论