![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 60
天天
手把青秧插满田
低头便见水中天
心地清净方为道
退步原来是向前
展开
-
javaVM 判断对象实例何时回收 用的可达性分析算法,而非引用计数算法
java虚拟机判断一个对象实例是否可以被回收,并非引用计数算法。因为引用计数算法很难解决对象直接互相循环引用的问题。所以java C#都是使用可达性分析来判断对象是否可以回收的。原创 2015-01-30 18:17:35 · 3468 阅读 · 1 评论 -
JVM 编译优化 静态常量会被添加到当前类的“常量池”中,无需加载引用类(常量不加载/常量找不到/常量不更新)
标题有点绕,意思是说如果A类中定义了一个常量,且这个常量是一个“编译期常量”,那么当其他类在引用这个常量的时候。A类本身可以不被JVM加载,这个常量可以被直接引用。是不是更绕了,怎么还多出来一个“编译期常量”。即在编译期即可确定常量值。直接说重点,JVM这个编译优化会引起令人匪夷所思的BUG。让你查也查不到。还是要回到标题,不加载A类就能直接引用A类的常量。这个常量会被存在调用类的常量池中...原创 2019-01-16 13:17:06 · 1649 阅读 · 3 评论 -
java.lang.OutOfMemoryError: Java heap space 内存溢出问题排查
最近一直排查系统中的内存溢出问题。不管是用jmap指令还是用比较直观的jvisualvm工具。都可以看到堆内存中各个对象的数量以及占用的内存大小。一般只要找到有大量的自定义对象一直无法释放,那么距离定位到问题就不远了。来看一个例子吧:就像图里看到的这样 一般都是这些对象数量巨大内存大部分也都是他们占用的。今天明确了一个问题,这里统计的String对象指所有的String对象...原创 2018-09-07 15:57:31 · 9236 阅读 · 0 评论 -
Java中创建对象的5种方式
Java中创建对象的5种方式作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象。然而这里有很多创建对象的方法,我们会在这篇文章中学到。Java中有5种创建对象的方式,下面给出它们的例子还有它们的字节码使用new关键字} → 调用了构造函数使用Class类的newInstance方法} → 调用了构造函数使用Constructor类的newInstanc...转载 2018-04-27 09:40:53 · 288 阅读 · 0 评论 -
java虚拟机内存设置
原文地址:http://www.cnblogs.com/jack204/archive/2012/07/02/2572932.htmlJVM(java 虚拟机)内存设置一、设置JVM内存设置1. 设置JVM内存的参数有四个:-Xmx Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而转载 2016-12-22 14:48:33 · 3323 阅读 · 0 评论 -
Java中==和equals的区别,equals和hashCode的区别
==是运算符,用于比较两个变量是否相等。 equals,是Objec类的方法,用于比较两个对象是否相等,默认Object类的equals方法是比较两个对象的地址,跟==的结果一样。Object的equals方法如下: public boolean equals(Object obj) { return (this == obj); } hashCode也是Object类的一个方法。返回一个离散的int型整数。在机会类操作中使用,为了提高查询速度。(HashMap,Has原创 2015-07-21 17:01:56 · 40619 阅读 · 7 评论 -
finally中使用return会吃掉catch中抛出的异常
如果把return和throw放在一起,直接会提示错误。"Unreachable statement"(无法被执行).然而finally却可以成功骗过编译器让两者并存(是不是可以算是编译器的一个小bug呢),结果是后执行的会覆盖前者。finally如果有return会覆盖catch里的throw,同样如果finally里有throw会覆盖catch里的return。进而如果catch里和finally都有return finally中的return会覆盖catch中的。throw也是如此。这样就好理解原创 2015-07-06 17:30:07 · 9259 阅读 · 2 评论 -
组合还是继承
使用继承的判断标准:看否需要从新类上溯造型回基础类。“在面向对象的程序设计中,创建和使用代码最可能采取的一种做法是:将数据和方法统一封装到一个类里,并且使用那个类的对象。有些时候,需通过“合成”技术用现成的类来构造新类。而继承是最少见的一种做法。因此,尽管继承在学习OOP的过程中得到了大量的强调,但并不意味着应该尽可能地到处使用它。相反,使用它时要特别慎重。只有在清楚知道继承在所有方法中最有效原创 2015-06-15 16:50:26 · 600 阅读 · 0 评论 -
java中volatile关键字的含义
原文地址:http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关键字转载 2015-06-12 13:14:52 · 580 阅读 · 0 评论 -
java 接口可以多继承
接口是常量值和方法定义的集合。接口是一种特殊的抽象类。java类是单继承的。classB Extends classAjava接口可以多继承。Interface3 Extends Interface0, Interface1, interface……以下是spring ApplicationContext 接口的代码,同时继承了多个接口public interface Appli...转载 2015-06-16 10:08:28 · 43570 阅读 · 10 评论 -
Java类加载机制——如何实现一个工程中不同模块加载不同版本的同名jar包。
如何实现一个工程中不同模块加载不同版本的同名jar包?曾是阿里面试的时候遇到的一个面试题。当时就有点晕,如果是平时遇到这样的问题肯定是统一加载相同版本的就好了。而如果系统特别庞大依赖冲突繁多,涉及多部门协调,真的有必要解决这样的问题。这个问题困扰我很久,一直没有好的解决办法。最近研究java虚拟机。终于找到了答案。原创 2015-02-11 14:58:55 · 14735 阅读 · 8 评论 -
JVM方法分派
方法静态分派演示/** * 方法静态分派演示 * Created by tiantao on 15-2-9. */public class StaticDispatch { static abstract class Human { } static class Man extends Human { } static class Woma原创 2015-02-09 18:27:35 · 594 阅读 · 0 评论 -
使用Jconsole远程监控Linux系统中java服务器
在Linux的服务器启动项中添加如下信息:-Djava.rmi.server.hostname=192.168.1.101-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=911-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.manageme原创 2014-10-31 12:55:29 · 6005 阅读 · 1 评论 -
centos7通过yum安装JDK1.8
安装之前先检查一下系统有没有自带open-jdk命令:rpm -qa |grep javarpm -qa |grep jdkrpm -qa |grep gcj如果没有输入信息表示没有安装。如果安装可以使用rpm-qa|grepjava|xargsrpm-e--nodeps批量卸载所有带有Java的文件这句命令的关键字是java首先检索包含jav...转载 2019-06-12 13:43:01 · 19048 阅读 · 3 评论