随笔分类 -  jvm相关

摘要:对象的内存分配,往大的方向上讲,就是在堆上分配,少数情况下也可能会直接分配在老年代中,分配的规则并不是百分之百固定的,其细节决定于当前使用的是哪种垃圾收集器组合,当然还有虚拟机中与内存相关的参数。垃圾收集器组合一般就是Serial+Serial Old和Parallel+Serial Old,前者是 阅读全文
posted @ 2017-03-22 14:10 TP000 阅读(447) 评论(0) 推荐(0)
摘要:哪些内存需要回收? 哪些内存需要回收是垃圾回收机制第一个要考虑的问题,所谓“要回收的垃圾”无非就是那些不可能再被任何途径使用的对象。那么如何找到这些对象? 1、引用计数法 这个算法的实现是,给对象中添加一个引用计数器,每当一个地方引用这个对象时,计数器值+1;当引用失效时,计数器值-1。任何时刻计数 阅读全文
posted @ 2017-03-22 10:23 TP000 阅读(351) 评论(0) 推荐(0)
摘要:java内存模型 Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。在此之前,主流程序语言(如C/C++等)直接使用物理硬件和操作系统的内存模型,因此,会由于 阅读全文
posted @ 2017-03-16 21:05 TP000 阅读(188) 评论(0) 推荐(0)
摘要:对象内存布局 在Hotspot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头,实例数据,对齐填充。 1.对象头 1.1 存储对象自身的运行时数据(mark word):哈希码,gc分代年龄。 1.2 Class指针:通过该指针确定该对象是哪个类的实例。 在64位系统中,class指针占4B 阅读全文
posted @ 2017-03-16 19:22 TP000 阅读(377) 评论(0) 推荐(0)
摘要:volatile关键字 作用是使变量在多个线程间可见。 关键字volatile可以说是Java虚拟机提供的最轻量级的同步机制。 一个变量被定义为volatile后,它将具备两种特性: 1、保证此变量对所有线程的"可见性",所谓"可见性"是指当一条线程修改了这个变量的值,新值对于其它线程来说都是可以立 阅读全文
posted @ 2017-03-16 18:38 TP000 阅读(1055) 评论(0) 推荐(0)
摘要:堆内存溢出 要想保证堆内存溢出,那么只要不断创建对象并且对象不被回收,那么对象数量到达最大堆限制后就会出现内存溢出的异常了。 虚拟机参数:-Xms20M -Xmx20M -XX:+HeapDumpOnOutOfMemoryError 结果 栈内存溢出 java虚拟机规范中描述如果线程请求的栈深度太深 阅读全文
posted @ 2017-02-28 15:37 TP000 阅读(211) 评论(0) 推荐(0)
摘要:jvm常用的参数: 1.-Xms20M 设置堆容量的最小值为20M,必须以M为单位。 2.-Xmx20M 设置堆容量的最大值为20M,必须以M为单位。把-Xms和-Xmx的值设为一样可以避免堆自动扩展。大的项目-Xmx和-Xms一般要10G、20G甚至更高。 3.-verbose:gc 输出虚拟机中 阅读全文
posted @ 2017-02-27 18:03 TP000 阅读(757) 评论(0) 推荐(0)
摘要:类使用的7个阶段 类从被加载到虚拟机内存中开始,到卸载出内存,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initiallization)、使用(Using)和卸载(Unloading)这7个阶 阅读全文
posted @ 2017-02-14 17:23 TP000 阅读(175) 评论(0) 推荐(0)
摘要:JDK和JRE 1、JDK(Java Development Kit),是用于支持Java程序开发的最小环境,基本上Java程序设计语言、Java虚拟机、Java API类库这三部分组成了JDK 2、JRE(Java Runtime Enviroment),是支持Java程序运行的标准环境,Java 阅读全文
posted @ 2017-02-13 16:26 TP000 阅读(204) 评论(0) 推荐(0)