首页
学习
活动
专区
圈层
工具
发布

java 中将引用置为null能help gc吗?

在idea 是搜索help gc 会出现如下图所示结果: ? 可以发现,有很多将引用置为null的操作,然后注释写的是help gc 。 那么,这个help gc操作真的有用吗?...有一种说法是,现在jvm已经足够智能,会进行自动优化,不需要这样做。 另一个说法是,具体有没有用,得看具体的代码。如果那个引用从来都没有逃逸出去,这样写就是没有什么作用的。...有人说,逃逸分析是在1.6才实现,置null 操作在1.6之前可能有些用处。在即使逃逸分析已经很牛的现在,在Tree、链表这种结构中依旧要置null,因为还有一个问题是:浮动垃圾。...置null 操作是有help gc的作用的。 另外,Effective Java 3rd 的Item7:Eliminate obsolete object references 也讲了这个问题。...https://jiapengcai.gitbooks.io/effective-java/content/chapter1/di-7-tiao-ff1a-xiao-chu-guo-shi-de-dui-xiang-yin-yong.html

2.5K30

你真的了解 Java volatile 关键字吗?

Java 编译器会在生成指令系列时在适当的位置会插入内存屏障指令来禁止特定类型的处理器重排序。 ? JMM 会针对编译器制定 volatile 重排序规则表 " NO " 表示禁止重排序。...volatile 写是在前面和后面分别插入内存屏障,而 volatile 读操作是在后面插入两个内存屏障。...= null) doSomething(floobleLoader.theFlooble); } } } 模式 #3:独立观察(independent...increment() { return value++; } } 模式 #6 双重检查(double-checked) 单例模式的一种实现方式,但很多人会忽略 volatile 关键字...,因为没有该关键字,程序也可以很好的运行,只不过代码的稳定性总不是 100%,说不定在未来的某个时刻,隐藏的 bug 就出来了。

81110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java 中关于 Null 的这些事儿你知道吗

    对于 Java 程序员来说,null 一直是令人头疼的问题,经常会受到 NullPointerException 的蹂躏和壁咚。Java 的发明者也承认这是一个巨大的设计错误。...首先,null 是 Java 中的关键字,像是 public、static、final。它是大小写敏感的,你不能将 null 写成 Null 或 NULL,编辑器将不能识别它们然后报错。 ?...就像是基本类型的默认值一样,例如 int 的默认值是 0,boolean 的默认值是 false,null 是所有引用类型的默认值,Java中的任何引用变量都将null作为默认值,也就是说所有 Object...; binding.staticMehtod(); binding.instanceMethod(); } } 你应该使用 null-safe 安全的方法,java...跟SQL不一样,在Java中 null == null 将返回 true,如下所示: public class CompareNull { private static String str1

    1.1K30

    java native关键字是干嘛用的?

    今天一不小心跟进Object的源码中,发现一个native关键字,一脸蒙蔽,怎么我从来没有用过。...2.native关键字我们开发应用的时候是用不到的,那什么时候用到呢?那些开发java语言的时候用到,native关键字是与c++联合开发的时候使用的,要不java控制不了底层啊,比如内存。...3.这是java调用其他地方的接口的一个声明关键字,意思是这个方法不是java实现的,有挺多的编程语言都有这样的特性,比如c++里面使用extern "c"来表示告诉c++编译器去调用c里面已经实现好的函数...native方法有点像java 里面的interface,都不用去实现,而是有别人去实现,但是interface是谁实现接口谁实现,native方法是直接交给c/c++来实现。....png] 然后我们可以看到在helloworld.java所在的目录下多了两个文件,一个是helloworld.class文件,一个是helloworld.h文件。

    4.1K20

    Quarkus是Java的未来吗?

    介绍 Quarkus是Java世界的最新成员。由Redhat发起的这种开源框架已经讨论了一段时间。它缩短了启动时间,降低了执行成本,提高了生产率。...GraalVM(尤其是Substrate VM)现在为Java语言的美好而长远的未来打开了大门。...好处是GraalVM允许您提前将程序编译为本地可执行文件。这意味着您可以将Java代码直接编译为特定于机器的代码。...这特别重要,尤其是当我们使用微服务时。 ? 假设我们有一个应用程序,该应用程序基于JAVA分为6个微服务。然后,我们需要在每个工具中安装JDK来运行Java应用程序。...> From Quarqus.io 结论 Quarkus是针对Java虚拟机(JVM)和本机编译的全栈Kubernetes本地Java框架,专门针对容器优化Java,并使之成为无服务器云(Faas)和Kubernetes

    4.7K20

    【C++】内联函数、auto关键字、NULL与nullptr

    专栏放在【C++知识总结】,会持续更新,期待支持 ---- 内联函数 宏与内联函数 我们在C语言阶段就学习了关键字#define 用来定义宏(宏函数、宏常量),然后在预处理阶段会实现宏的替换,这样的话不仅大大的提高了代码的复用性...ADD(a,b) ((a)+(b)); error 而C++针对宏存在的这些缺点,给出了以下应对方法: 用const enum来定义常量 用内联函数来替换短小宏函数的定义 内联函数的概念 函数前面用关键字...auto关键字 用法 就不多做一些背景介绍了,直接谈谈它的用法,auto的作用:用来进行自动推导变量的类型并进行替换,具体是什么意思呢?...NULL与nullptr NULL实际是一个宏,在传统的C头文件(stddef.h)中,可以看到如下代码: #ifndef NULL #ifdef __cplusplus #define NULL...0 #else #define NULL ((void *)0) #endif #endif 这段代码的意思就是说,在c++环境下,定义NULL表示0,这里的0就是int类型的数字0

    75660

    JAVA面试中的final关键字,你真的了解吗

    final关键字的使用方法以及含义,在JAVA面试中经常会被问到,final可以修饰变量,方法和类,用于表示所修饰的内容一旦赋值之后就不会再被改变,比如String类就是一个final类型的类。...final能够修饰变量,方法和类,也就是final使用范围基本涵盖了java每个地方,下面就分别以锁修饰的位置:变量,方法和类分别来说一说。...final修饰方法 下面这段话摘自《Java编程思想》第四版第143页: “使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。...在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。”...会导致线程安全的问题吗? 1 final域为基本类型 先看一段示例性的代码: ? 假设线程A在执行writer()方法,线程B执行reader()方法。

    1.3K20

    成员可能是null的

    C# 8可以让你在编译时就避免null引用错误,它并不是把null值从代码里移除了,而是它可以让你表达意图。具体的做法就是你可以告诉编译器哪个引用可能是null的,而哪些引用不可能是null。...但是在C# 8之前,如果我们这样调用该方法,那么在编译时是不会报错的: image.png 而如果运行程序,那么结果就是: image.png 打开null检查 而在Visual Studio...成员可能是null的 如果我想让这些成员可以为null(意图上),那么就需要把它们设置为可null的(意图),在类型后边加上问号“?”...可以有几种办法把这个警告去掉,首先是使用null条件操作符: image.png 如果是Address是null的话,就输出null。...成员不可能是null 下面我更改一下思路意图,假设所有的成员都不可能为null,那么修改两个类: image.png 类成员又出现了警告。

    1.1K31

    Java中的null“类型”

    null是一个非常非常特殊的类型,对于每一个测试人员都要十分小心null的存在的可能性。同时null也让很多RD头疼,甚至连Java的设计者都成人null是一个设计失误。...null 到底是怎样的存在 在Java中有基本类型和引用类型,但是null却不属于上述两种,我们即不能声明一个变量为null类型,也不能将变量转换为null。...null的引用是唯一一种null正确的表达方式。但是null却可以转换成任何一种引用类型。...null的一些细节注意点 null的装箱拆箱的细节 先说一个Java的概念:装箱和拆箱 Integer count =100;装箱 int sum =count;拆箱 上面的代码清洗的解释了装箱和拆箱的过程...布尔运算 null很特别,但是可以而且仅可以做布尔运算。 null==null的结果是true,但是这里面特别注意:如果是两个null的引用变量那么首先要保证两个引入变量的类型完全一致。

    2.6K30

    了解final关键字在Java并发编程领域的作用吗?

    在Java并发编程领域,final关键字扮演着一个至关重要的角色。虽然很多同学熟悉final用于修饰变量、方法和类的基本用法,但其在并发环境中的应用和原理却常常被忽视。...final关键字不仅仅是一个简单的修饰符,它在多线程编程中确保对象状态的可见性和不变性,这对于构建线程安全的应用至关重要。...本文将深入探讨final关键字的作用,揭示其在Java并发编程领域中的重要性及实现原理。...final域重排序规则Java内存模型为了能让处理器和编译器底层发挥他们的最大优势,对底层的约束就很少,也就是说针对底层来说Java内存模型就是 弱内存数据模型。...而final能够做出如下保证:当创建一个对象时,使用final关键字能够使得另一个线程不会访问到处于“部分创建”的对象,否则是会可能发生的。

    52810

    Java this 关键字

    this 关键字用来表示当前对象本身,或当前类的一个实例,通过 this 可以调用本对象的所有方法和属性。...this.name + ",已经成立了" + this.age + "年"); } Java 默认将所有成员变量和成员方法与 this 关联在一起,因此使用 this 在某些情况下是多余的。...上述代码涉及到方法重载,即Java允许出现多个同名方法,只要参数不同就可以。后续章节会讲解。 作为参数传递 需要在某些完全分离的类中调用一个方法,并将当前对象的一个引用作为参数传递时。...this 关键字用来表示当前对象本身,或当前类的一个实例,通过 this 可以调用本对象的所有方法和属性。...this.name + ",已经成立了" + this.age + "年"); } Java 默认将所有成员变量和成员方法与 this 关联在一起,因此使用 this 在某些情况下是多余的。

    61930
    领券