Java虚拟机
java语言
开发1024
IT从业六载的Java士兵
展开
-
十一、垃圾回收策略配置
在对于JVM而言,本身有两种运行模式:单机版客户端程序(client)、服务端程序(server)。 常用GC策略 GC策略调整参数 收集器参数设置 如果要想确认使用的GC处理,首先需要知道当前主机上可以支持的处理进程数量。 范例 范例1:取得可用的进程数量 Runtime.getRuntime().availableProcessors(); 范例2:观察使用的默认GC模式 public...原创 2019-12-31 12:09:09 · 277 阅读 · 1 评论 -
十、垃圾回收策略概览
文章目录垃圾收集策略分类 JVM会自己选择合适的垃圾收集策略,而用户自己也可以自己来设置自己所需要的垃圾收集策略。不过就个人而言,强烈建议采用默认的垃圾收集处理机制。 垃圾的收集一定要分两个空间考虑:年轻代、老年代。因为老年代的内存空间要大于年轻代的内存空间,所以老年代每次执行GC都会消耗更多的时间。 垃圾收集策略分类 因为同一种垃圾收集策略,有可能会根据触发内存代的不同又不同的效果,所以先看...原创 2019-12-31 12:02:00 · 249 阅读 · 0 评论 -
九、元空间
元空间是永久代的替代品 从JDK1.8开始正式取消了永久代之后,取而代之的就是元空间(MetaSpace),所谓的元空间的本质指的是本机物理内存,其作用和永久代相同。不过元空间和永久代有很大的区别:元空间用的是物理内存(受到本机的物理内存的限制),而永久代是JVM的内存空间,本身受到JVM的限制。两者作用是一样的,都是保存那些基本上不会被清空的操作的,比如字符串常量池。 元空间的调整参数 -X...原创 2019-12-31 11:52:36 · 317 阅读 · 0 评论 -
八、永久代
永久代在JDK1.8后被废除,在JDK1.8之前是一个bug性的存在,其核心本质在于:该区域中的对象不会被回收。简单的理解就是方法区就是永久代。 取消原因 HotSpot虚拟机规范中是有永久代概念的,可是BEA和IBM的虚拟机规范中是不包含永久代概念的。于是,Oracle现在将HotSpot中的永久代取消了,希望HotSpot与JRockit两个虚拟机的规范进行合并。 永久代会发生的异常 使用动...原创 2019-12-31 11:23:31 · 278 阅读 · 0 评论 -
七、老年代
前言 一个对象想要活到老年代实在太难了,因为现在的程序属于多线程访问,所有的业务操作都是针对于线程操作的,那么所有的线程在整体的操作过程之中时间都是非常短的。这些对象都是在年轻代中开辟,很少能跑到老年代中。 老年代 老年代空间主要目的是用于存储由Eden发送过来的对象,一般在经历过好几次“Minor GC”还会被保存下来的对象,才会被复制到老年代,一般老年代的内存空间大小会设置的比年轻代要大,这...原创 2019-12-31 11:21:27 · 182 阅读 · 0 评论 -
六、年轻代
年轻代,主要分为两个区域: 伊甸园区 所有新创建的对象都会存活在伊甸园区,并且伊甸园区的保存空间一定是最大的,因为产生新对象的几率是很高的。由于伊甸园区的对象可能只是临时创建,为了方便回收,所以其拥有一个Monor GC的回收操作处理。 存活区 在经过多次的Minor GC后依然被保留的对象,就认为不应该被回收,将其保存到存活区。 存活区分为两类:存活0区(S0区、From Space)、存...原创 2019-12-31 11:13:52 · 264 阅读 · 0 评论 -
五、堆内存调整参数
Java内存基本的调优的调优策略 我们知道GC发生的越频繁,就会对整个系统的性能影响越多。那么如何不频繁的发生GC呢? 存活区空间足够大,老年代空间足够大。就是说内存越大GC发生的频率越低,系统性能就越高。 范例:首先取的可用的内存空间量 public static void main(String[] args) { int rat=1024*1024; Runtime run=Runti...原创 2019-12-31 10:57:09 · 593 阅读 · 0 评论 -
四、对象创建和垃圾回收流程
在Java中支持GC的概念,GC有两种调用形式:自动调用、手工调用: (Runtime.getRuntime().gc()) 在写代码的时候,很少手工调用,因为不是实时的。那为什么不是实时的?因为GC不是把没用的空间腾出来就完毕了。比如说,有十处垃圾点,直观感受回收就是把垃圾挪出去就行,其实不是。因为一旦要进行GC,至少应该先找到垃圾,而后再把垃圾的空间填新东西。 自动调用 JVM什么时候会...原创 2019-12-31 10:46:00 · 348 阅读 · 1 评论 -
三、堆内存模型
JVM的垃圾收集指的是堆内存空间,那么在每次GC的时候需要区分出那些堆内存空间需要被回收,那些不应该被回收。所以,为了回收整体处理方便,JVM将堆内存分为如下的几个组成部分。这几个组成部分还需要考虑JDK的版本,JDK1.8以前和JDK1.8以后的问题。 新生代:那些刚刚创建的对象有可能会存在许多垃圾对象,那么这些对象应该是被优先回收 老年代:老不死的那类对象,就是经过很多次的清理之后...原创 2019-12-31 10:42:37 · 188 阅读 · 0 评论 -
二、对象访问模式
句柄、直接指针 很多语言中都存在一个句柄的概念,这个概念的产生主要是在引用数据类型上,比如下面一段代码: Object obj=new Object(); 这段代码可以按照两个部分考虑 “Object obj” 声明对象,此处表示的是一个本地引用,那么这个本地的引用一定会本身保留一个堆内存的地址,还会包含一个本地变量表的概念,也就是说,引用类型通过本地变量表才能找到一个堆内存的引用数据 o...原创 2019-12-31 10:38:16 · 176 阅读 · 2 评论 -
一、内存模型
前言 对于Java程序而言,已经是一门超过20年的语言,对于开发者就不再只是能实现项目的需求就可够了,除此之外还需要对程序的调优有一定的能力。 本系列文章,帮你去深刻Java中的内存是怎么分配的,以及它的内存分为几块,同时最重要的是我们用什么样的方法能够保证发挥出你电脑的最高性能。提升的是我们的操作能力。 概述 图中展示的信息 类加载器(ClassLoader),用户可以实现自定义的类加载器...原创 2019-12-31 10:30:01 · 158 阅读 · 0 评论