![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
黑衣如墨剑如雪
人生在世,你只要知道两件事。一,这世上绝对存在不需要读书也很聪明,不需要努力也过得很好,甚至不需要钱就能快乐的人。二,那个人绝对不是你。
展开
-
GC调优
一般情况下,不需要进行GC调优。需要GC调优情况绝大部分是由于代码造成的,因此,绝大部分情况下,我们需要做的是通过分析GC情况来优化代码。只有在代码及其它途径很难优化,但是又确实存在GC问题时,才考虑GC调优。GC调优的目的GC的次数少,GC的时间短,发生Full GC的周期长,时间合理,最好是不发生。GC调优的步骤1)、监控应用程序;2)、分析GC日志;3)、多次进行GC...原创 2019-11-05 10:44:17 · 501 阅读 · 0 评论 -
JVM中GC参数
Demo:package com.su.mybatis.oracle.controller;import java.util.LinkedList;import java.util.List;public class Test { public static void main(String[] args) { List<byte[]> lis...原创 2019-11-03 18:11:43 · 131 阅读 · 0 评论 -
简单了解JVM中的垃圾回收器
单线程回收器单线程回收器是指只开启一个线程进行垃圾回收的操作,进行垃圾回收时,暂停用户工作线程。在单CPU环境下,单线程回收器没有线程切换的开销,专心垃圾收集,更加简单高效。1、Serial新生代使用,采用复制算法。2、Serial Old老年代使用,采用标记整理算法。Serial一般与Serial Old搭配使用多线程回收器顾名思义,多线程回收器通过多线程来进...原创 2019-11-03 18:20:07 · 84 阅读 · 0 评论 -
JVM堆中的配置参数
堆内存特性1)、新生代内存 = eden区内存+ from区内存 +to区内存 ,from区内存 = to区内存;2)、新生代可用内存 = eden区内存 + from区内存(复制算法需要预留一个survivor区);3)、堆空间内存 = 新生代内存 + 老年代内存;4)、默认情况下,eden区内存:from区内存:to区内存 = 8:1:1;5)、默认情况下,新生代内存:老...原创 2019-10-31 20:36:44 · 378 阅读 · 0 评论 -
分代收集算法
分代收集算法是JVM垃圾回收的机制,其实是【简单了解常见的GC算法】的综合应用。JVM的堆中存在许多对象,根据这些对象的生命周期(存活时间)可以将内存分为几个部分,eg:堆上的新生代和老年代,方法区的永久代。每个部分使用不同的GC算法进行垃圾回收,这就是分代收集算法。新生代顾名思义,新生代指新建对象存放的地方。一般来说,新建对象存放在新生代中,eg:局部变量。java程序中,90%以上的对...原创 2019-10-31 21:30:02 · 1166 阅读 · 0 评论 -
简单了解常见的GC算法
1、复制算法将内存平分为两部分(from(a)和to(b),左a右b),假设最开始是使用a,预留b,当a内存不够时,就将a中不可回收的对象复制到b中,然后a中所有对象清空,此时内存使用情况变成使用b。预留a。图解优点:实现简单,回收的效率高(直接全部清空),不会出现内存碎片问题;缺点:内存利用率低,只使用一半内存;不可回收对象越多,(复制对象)效率越低。2、标记-清除算法...原创 2019-10-30 19:51:33 · 279 阅读 · 0 评论 -
Java中的引用
Java中的引用可以分为四类:强引用、软引用、弱引用、虚引用。四种引用从左到右,依次减弱。强引用(Strong Reference)只要强引用存在,就算内存溢出,也不会去回收的引用对象,eg:String a = new String("123")。使用了“=”来关联对象的都是强引用,显然,强引用在java代码中非常常见。设置-Xms8M -Xmx8Mpackage com.su...原创 2019-10-29 22:39:17 · 87 阅读 · 0 评论 -
可达性分析算法
可达性分析算法通过GC Roots的对象为起点,向下搜索,能到达的对象为不可回收对象,不能到达的对象为需要回收的对象。Java中就是通过可达性分析算法来判定对象是否存活的。GC Roots的对象1)、方法区中常量引用的对象;2)、方法区中类静态属性(static修饰)引用的对象;3)、虚拟机栈(本地变量表)中引用的对象(正在被使用);4)、本地方法栈(native修饰方法)...原创 2019-10-29 21:29:50 · 1860 阅读 · 0 评论 -
引用计数算法
引用计数算法使用一个计数器来记录对象被引用的次数。当对象被引用时,计数器加1;当对象的引用被解除时,计数器减1;当引计数器为0时,对象会被回收。举个例子(假设下面代码使用引用计数算法):package com.su.mybatis.oracle.controller;public class Test { public static void main(String[]...原创 2019-10-29 21:29:09 · 560 阅读 · 0 评论 -
设置JVM参数
eclipse中设置jvm参数1)、Window → preferences,这么设置适用于eclipse中所有项目2)、选中类(eg:Test.class)→ 右键Run As→ Run Configurations,(如果Java Application中没有Test,则先运行一下Test中的main方法)适用于单个类(eg:main方法测试使用)Tomcat设置JVM...原创 2019-10-28 23:39:41 · 233 阅读 · 0 评论 -
内存溢出和内存泄漏
内存溢出内存溢出,Out Of Memory,简称OOM。程序无法获得足够的内存空间时,就会出现内存溢出。内存溢出会导致程序无法正常运行或者自动关闭,可能在重启服务后又可以正常运行(释放掉了部分内存),但是该问题仍会存在。内存溢出的具体方式【设置JVM参数】1、栈溢出相对于堆来说,栈的内存比较小,这也就意味着栈中存放的数据是有限的,当需要存放的数据大于栈的内存时,出现栈溢出。...原创 2019-10-28 23:40:03 · 143 阅读 · 0 评论 -
JVM内存
JVM内存包括若干个数据区域,如线程私有的程序计数器、虚拟机栈、本地方法栈;线程共享的方法区、堆。JVM组成部分1)、程序计数器程序计数器即计算机处理器中的寄存器,指向当前线程正在执行的指令地址,类似于书签。程序计数器占用内存空间非常小,几乎可以忽略不计。它保证了多线程情况下,线程进行切换时,程序能快速找到执行的位置。2)、虚拟机栈执行方法时会对应生成一个栈帧,栈帧包括局部变量...原创 2019-10-24 20:53:06 · 378 阅读 · 0 评论 -
Java虚拟机
JVM的概念Java虚拟机(JVM,Java Virtual Machine)是运行所有Java程序的抽象计算机,是Java等语言的运行环境。java程序能够一次编译,处处运行就是依赖Java虚拟机。JVM的组成部分1)、类加载器加载.class文件 ,验证文件的正确性,为类分配初始内存等;2)、jvm内存运行数据区,服务器内存上的一块内存区域,存储Jvm需要用到的对象,变...原创 2019-10-24 20:52:47 · 95 阅读 · 0 评论