
深入理解Java虚拟机
文章平均质量分 92
佐杰
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
最新的G1垃圾回收器的工作原理,你能聊聊吗?
所以简单来说,G1可以做到让你来设定垃圾回收对系统的影响,他自己通过把内存拆分为大量小Region,以及追踪每个Region中可以回收的对象大小和预估时间,最后在垃圾回收的时候,尽量把垃圾回收对系统造成的影响控制在你指定的时间范围内,同时在有限的时间内尽量回收尽可能多的垃圾对象。然后在垃圾回收的时候,G1会发现在最近一个时间段内,比如1小时内,垃圾回收已经导致了几百毫秒的系统停顿了,现在又要执行一次垃圾回收,那么必须是回收上图中那个只需要200ms就能回收掉20MB垃圾的Region啊!原创 2024-05-28 21:35:53 · 870 阅读 · 0 评论 -
什么情况下JVM内存中的一个对象会被垃圾回收?
有GC Roots引用的对象不能回收,没有GC Roots引用的对象可以回收,如果有GC Roots引用,但是如果是软引用或者弱引用的,也有可能被回收掉。其实这里比较常用的,就是强引用和软引用,强引用就是代表绝对不能回收的对象,软引用就是说有的对象可有可无,如果内存实在不够了,可以回收他。然后如果新生代里的对象越来越多,都快满了,此时就会触发垃圾回收,把新生代没有人引用的对象给回收掉,释放内存空间。所以说,只要你的对象被,方法的局部变量,类的静态变量给引用了,就不会回收他们。原创 2024-05-28 21:10:56 · 1035 阅读 · 0 评论 -
每日百万交易的支付系统,如何设置JVM堆内存大小?
那么大体上你的脑子里可以出现的一个流动的模型,应该是每台机器一秒钟接收到30笔支付订单的请求,然后在“JVM的新生代里创建了30个支付订单的对象”,做了写入数据库等处理,接着1秒之后,这30个支付订单就处理完毕,然后对这些支付订单对象的引用就回收了,这些订单在JVM的新生代里就是没人引用的垃圾对象了。只要大家网购过,大概的流程都会非常的清晰,假设我们在一个APP或者一个网站里买东西,大体上都是对一些商品加到购物车里,然后下个订单,接着对订单进行支付,钱从我们的账户划拨到人家网站的账户里去,大致如此。原创 2024-05-26 17:02:09 · 1001 阅读 · 0 评论 -
类初始化的时机如下
1.当创建某个类的新实例时(如通过new或者反射,克隆,反序列化等2.当调用某个类的静态方法时3.当使用某个类或接口的静态字段(被final修饰并且赋值常量除外)时 4.调用Java API中的某些反射方法时,比如类Class中的方法,或者java.lang.reflect中的类的方法时 5.当初始化某个子类时6.当虚拟机启动某个被标明为启动类的类(即包含main方法的那个类)7.注意:通过子类调用父类的静态成员时,只会初始化父类而不会初始化子类。 因为没有调用子类的相关静态成员,这也叫做能不加原创 2020-12-03 14:00:07 · 476 阅读 · 0 评论 -
jvm什么时候会加载一个类
jvm什么时候会加载一个类jvm什么情况下会加载一个类?下面说一说验证 准备 解析验证准备阶段解析初始化类的双亲委派机制启动类加载器扩展程序类加载器程序类加载器自定义类加载器双亲委派机制 
he Structure of the Java Virtual MachineRun-Time Data Areas (运行时数据区)The pc Register (程序计数器)Java Virtual Machine Stacks (java虚拟机栈)Heap(堆)Method Area(方法区)Run-Time Constant Pool (运行时常量池)Native Method Stacks(本地方法栈)Run-Time Data Areas (运行时数据区)The Java Virtual原创 2020-06-14 22:45:36 · 377 阅读 · 0 评论 -
Java官网翻译之运行时数据区
Java官网翻译之运行时数据区Run-Time Data AreasRun-Time Data AreasThe Java Virtual Machine defines various run-time data areas that are used during execution of a program. Some of these data areas are created on...原创 2020-05-04 17:51:02 · 233 阅读 · 0 评论