
jvm
hw120219
这个作者很懒,什么都没留下…
展开
-
eclipse打印gc日志
1、在eclipse根目录下的eclipse.ini配置文件中添加以下参数: -verbose:gc (开启打印垃圾回收日志) -Xloggc:eclipse_gc.log (设置垃圾回收日志打印的文件,文件名称可以自定义) -XX:+PrintGCTimeStamps (打印垃圾回收时间信息时的时间格式) -XX:+PrintGCDetails (打印垃圾回收详情) 添加完以上原创 2017-01-13 13:58:13 · 2375 阅读 · 0 评论 -
jvm-java内存模型与线程
为了提升计算机的效能,内存分为主内存和高速缓存,主内存线程共享,高速缓存线程独立。这样会带来另外的问题,缓存一致性问题。主内存与工作内存Java内存模型主要目标:定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量(Variable)与Java编程中的变量略有区别,它包括实例变量/静态字段和构成数组对象的元素,不包括局部变量和方法参数(线程私...原创 2019-07-19 15:34:45 · 149 阅读 · 0 评论 -
jvm类加载机制
一.目标:1.什么是类的加载?2.类的生命周期?3.类加载器是什么?4.双亲委派机制是什么?原理 (类的加载过程及其最终产品):JVM将class文件字节码文件加载到内存中, 并将这些静态数据转换成方法区中的运行时数据结构,在堆(并不一定在堆中,HotSpot在方法区中)中生成一个代表这个类的java.lang.Class 对象,作为方法区类数据的访问入口。过程(类的生命周期):J...原创 2019-07-19 10:18:58 · 132 阅读 · 0 评论 -
jvm垃圾收集器原理算法比较
存运行时,程序计数器、本地方法栈和虚拟机栈是随着线程的产生而产生,随着线程的消亡而消亡的,这几部分的内存分配和回收是确定好了的,随方法结束或线程结束时,内存就紧跟着回收了。而Java堆和方法区不一样。一个接口中多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,我们只有在运行期间才知道会创建哪些对象,故内存回收与分配重点关注的是堆内存和方法区内存。对于方法区,永久代的垃圾...原创 2019-07-18 21:09:42 · 150 阅读 · 0 评论 -
jvm内存区域
jvm可以细分为: 方法区,堆,虚拟机栈,本地方法栈,程序计数器线程共享区域:方法区和堆线程独享区域:虚拟机栈,本地方法栈,程序计数器。堆内存堆内存是所有线程共有的,可以分为两个部分:年轻代和老年代。下图中的Perm代表的是永久代,但是注意永久代并不属于堆内存中的一部分,同时jdk1.8之后永久代也将被移除。方法区方法区与Java堆一样,是各个线程共享的区域,它用于存储已被虚拟机加...原创 2019-07-18 14:44:33 · 115 阅读 · 0 评论 -
jvm 垃圾回收 内存分配策略
1.那些内存需要回收 其中程序计数器,虚拟机栈,本地方法栈3个区域随线程而生,随线程而灭,不需要过多考虑回收。因此内存回收主要是在java堆和方法区。2.对象何时回收? 对象死时,则回收。那么如何判断对象死了: 引用计数法:对象设置一个计数器,有一个地方引用则计数器加1,引用失效减1.当计数器为0时,则回收。 缺陷:无法解决对象间相互引用。可达性分析算法:通过一系列称为“”GC Roots“原创 2017-12-27 18:40:40 · 209 阅读 · 0 评论 -
GC回收器
1.串行收集器 新,老代都是串行 优点:稳定,效率高 缺点:停顿时间长 (新生代复制算法,老年代标记机压缩算法) 2.并行收集器 新生代并行,老年代串行。 (回收时使用了多线程) 3.paralle并行收集器,类似并行收集器(paralle可以设置老年代并行)-XX:+UseParalleOldGC 使用paralle收集器+并行老年代 4.cms收集器 与应用程序并行执行原创 2017-01-19 21:39:20 · 312 阅读 · 0 评论 -
gc算法与种类
java中gc的对象是堆与永久区。 gc算法 1.引用计数法 问题:伴随加法,减法,影响性能。 很难处理循环引用。 2.标记-清除算法 标记阶段,标记所有从根节点到达的可用对象,未被标记的就是不可达的垃圾对象原创 2017-01-13 14:15:18 · 386 阅读 · 0 评论 -
类装载器
class类装载器验证流程 1.装载类 2.取得类的二进制流 3.转为方法区数据结构 4.在java堆中生成java.lang.class对象。类装载器classLoader 1.它是抽象类 2.它的实例将java字节码将类装载到jvm中 3.它可以定制,满足不同的字节码流获取方式。 4.它负责类装载过程中的加载阶段。原创 2017-01-19 22:21:50 · 232 阅读 · 0 评论 -
JVM 新生代老年代
分代的唯一理由就是优化GC性能,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如果分代的话,我们把新创建的对象放到某一地方,当GC的时候先把这块存“朝生夕死”对象的区域进行回收,这样就会腾出很大的空间出来。 年轻代 年轻代分为了三部分:1个Eden区和2个Survivor区(分别叫from和to)。默认比原创 2017-01-13 08:27:06 · 470 阅读 · 0 评论 -
jvm运行机制,入门
1.通过java指令启动 2.根据当前路径和系统版本找jvm的配置文件 3.根据配置文件找到jvm.dll文件,为jvm主要实现 4.初始化jvm虚拟机 5.找到main方法运行 方法区:保存装载的类信息:1.类型的常量池(jdk1.7后放入堆中)2.字段方法信息 3.方法字节码。 java栈:线程私有,先进后出,栈里面放的是帧,帧里面放的是一个方法局部变量,常量池的指针,每调用 一次原创 2017-01-11 22:34:37 · 281 阅读 · 0 评论 -
java线程安全与自旋锁,轻量级锁,偏向锁原理解析
java线程安全,锁优化互斥同步互斥是实现同步的手段,临界区、互斥量、信号量都是主要的互斥实现方式。Java中最基本的互斥手段就是synchronized关键字,synchronized关键字在编译后,会在同步块前后分别形成monitorenter和monitorexit指令。这两个指令需要一个reference类型的参数来指明要锁定和解锁的对象。如果synchronized明确指定了对象参数...原创 2019-07-19 15:38:09 · 240 阅读 · 0 评论