Ryan's Blog

破坏双亲委派之后,能重写string类吗?

破坏双亲委派之后,能重写String类吗? 典型回答 Java通过双亲委派模型保证了java核心包中的类不会被破坏,但破坏双亲委派能够脱离加载范围的限制,增强第三方组件的能力。 什么是双亲委派?如何破坏? 但是我们虽然可以通过破坏双亲委派屏蔽Bootstrap ClassLoader,但无法重写java.包下的类,如java.lang.String。 我们知道,要破坏双亲委派模型是...

新生代如果只有一个eden+一个survivor可以吗?

新生代如果只有一个Eden+一个Survivor可以吗? 答案是不行,如果只有两个区域,也能实现复制算法,但是会大大浪费空间。 我们知道,新生代进一步区分了一个Eden区和2个Survivor区,一共有Eden Survivor From、Survivor To这三个区域,那么,为什么需要三个区域呢?2个行不行呢? 这其实涉及到新生代的垃圾回收算法了: 新生代和老年代的GC算法 根...

新生代和老年代的gc算法

新生代和老年代的GC算法 三种垃圾回收算法,标记复制、标记清除、标记整理中,比较适合新生代的算法是标记复制算法。 JVM有哪些垃圾回收算法? 因为对于新生代来说,一般来说GC的次数是要比老年代高很多的,所以需要一个效率更高的算法,而且最好不要有碎片,因为很多对象都是需要先在新生代分配空间的,如果碎片太多的话,那么就会导致很多对象无法正常分配了。 所以,新生代选择了标记复制算法进行垃圾...

对jdk进程执行kill 9有什么影响?

对JDK进程执行kill -9有什么影响? 典型回答 kill -9 命令会立刻关闭Jvm进程。但是kill -9的语意是强制关闭,会导致在Jvm中执行的服务立刻关闭,来不及收尾。如导致RPC服务没有从注册中心取消注册导致服务不可用,如导致事务执行一半直接终止等等 kill 命令 我们都知道,想要在Linux中终止一个进程有两种方式,如果是前台进程可以使用Ctrl+C键进行终止;如果是后...

字符串常量池是如何实现的?

字符串常量池是如何实现的? 典型回答 字符串常量池(String Constant Pool)是Java中一块特殊的内存区域,用于存储字符串常量。 当程序中出现字符串常量时,Java编译器会将其放入字符串常量池中。字符串常量是不可变的,因此可以共享。如果字符串常量池中已存在相同内容的字符串,编译器会直接引用已存在的字符串常量,而不会创建新的对象。 在HotSpot虚拟机中: 在JD...

如何判断jvm中类和其他类是不是同一个类?

如何判断JVM中类和其他类是不是同一个类? 类加载器虽然只用于实现类的加载动作,但它在Java程序中起到的作用却远远不限于类加载阶段。对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间。 简单点说:比较两个类是否“相等”,只有在这两个类是由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个C...