静态变量的加载问题

经常会有疑问,一个类的静态变量到底会在什么时候真正创建

今天实验了下,得出如下结论。

一个类的静态变量只会在该类被实例化,或者该类调用了静态变量、静态方法的时候创建。如果该类在其他类中只是定义变量,没有实际操作,静态变量也不会被实例化。

对于单例的饿汉模式,以前一直以为只要容器中有该类,就会创建单例对象,实际上是错误的。如果一个单例类仅仅有创建对象和操作该对象属性的操作,此时用饿汉模式非常好,因为它线程安全。

如果单例类有其他静态方法的操作,就有可能实例化了不想实例化的对象,造成该资源浪费。

此时可以用双重检查,或者内部类的方式构造性能好的单例

时间: 2024-10-14 04:30:51

静态变量的加载问题的相关文章

Web 前端性能优化 : 如何有效提升静态文件的加载速度

作者:刘轶斌,腾讯应用开发 工程师商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处.原文链接:http://wetest.qq.com/lab/view/345.html 一.如何优化 用户在访问网页时, 最直观的感受就是页面内容出来的速度,我们要做的优化工作, 也主要是为了这个目标.那么为了提高页面加载(或者渲染)速度呢?一般来说有三个方面: 1.代码逻辑:优秀的代码逻辑结构可以有效减少渲染页面使用的内存和速度(比如虚拟DOM),此方面不在本文讨论范围内. 2.SSR服务器渲染,也

Web前端性能优化——如何有效提升静态文件的加载速度

一.如何优化 用户在访问网页时, 最直观的感受就是页面内容出来的速度,我们要做的优化工作, 也主要是为了这个目标.那么为了提高页面加载(或者渲染)速度呢?一般来说有三个方面: 1.代码逻辑:优秀的代码逻辑结构可以有效减少渲染页面使用的内存和速度(比如虚拟DOM),此方面不在本文讨论范围内. 2.SSR服务器渲染,也就是所谓的“直出”.将首屏所有内容在服务器端渲染成html静态代码后,直接输出给浏览器,可以有效加快用户访问站点时首屏的加载时间.不过此方面也不在本文讨论范围内. 3.提升静态文件的加

Hexo博客部署codingNet静态资源无法加载

用Hexo搭建的个人博客,部署到github的pages的话,好像百度搜索不到.所以在国内的codingNet的pages服务也一起部署一下,这样方便国内国外搜索引擎收录进来.具体部署教程我是参考这里但是今天部署到codingNet的pages服务的时候,发现静态资源都加载不到,后来网上搜索了半天,才发现原来你要打算用codingNet的pages服务部署你的博客的话,你创建项目的名字必须和用户名保持一致,不能自己随便自定义.我重新创建了一个和用户名一致的项目,部署到他的pages服务,访问正常

Eclipse中使用Tomcat加载项目在浏览器中访问的时候JS和CSS等静态文件无法加载的问题

首先,我的Eclipse是引用外部的Tomcat 引用外部Tomcat会在左侧生成一个Server文件夹,相当于复制了一份Tomcat到Eclipse的安装目录里 具体Tomcat所在目录可以在这进行查看 双击Tomcat服务,会打开一个窗口,然后点击Open launch configuration,可打开配置窗口,在这里可以查看到具体服务所在位置. 接下来步入正题,正如题目所说,Eclipse中使用Tomcat加载项目在浏览器中访问的时候JS和CSS等静态文件无法加载,如图 仔细看下路径,会

django 中静态文件项目加载问题

问题描述: django项目中创建了多个app后,每个app中都有对应的static静态文件.整个项目运行时这些静态文件的加载就是一个问题,因为整个项目我只参与了一部分,项目部署之类的并没有参与.我写的部分的js代码遇到点问题,修改了相应的代码后整个项目没有按照我的设想改变. 解决: 在项目中执行 python manage.py collectstatic 该命令收集项目下的静态文件,统一保存到 项目配置文件下的STATIC_ROOT.以重新加载静态文件. 原文地址:https://www.c

JavaEE初始化时静态代码块加载问题

1.使用java.exe命令运行某个类的时java.exe Person2.创建一个类的对象时Person p=new Person();3.访问类中的静态成员变量(赋值/获取值)System.out.println(Person.className);4.访问了类中的静态成员方法Person.method();5.创建类的子类对象的时候Student s=new Student();6.使用反射方式来强制创建某个类或接口对应的java.lang.Class对象System.out.printl

QT5.4 vs2013静态编译之加载静态插件sqlite

1. 很多同学在静态编译QT5完成后, sqlite的驱动老是加载不进去, 原因可能是因为你没有如下操作: #include <QtPlugin> Q_IMPORT_PLUGIN(QSQLiteDriverPlugin) 记得是 QSQLiteDriverPlugin 而不是 qsqlite 当然你在编译的时候的configure 要把插件编进去-plugin-sql-sqlite

web站点优化之使用tengine搭建静态资源服务器和静态资源合并加载案例剖析

在一个项目还是单体架构的时候,所有的js,css,image都会在一个web网站上,看起来并没有什么问题,比如下面这样: 但是当web网站流量起来的时候,这个单体架构必须要进行横向扩展,而在原来的架构中静态资源这羊毛是出在单体架构这头羊身上,所以横向多少 个单体,就有多少个静态资源文件夹,比如下面这样的架构. 那这种架构有什么问题呢? 总的来说会有如下二个问题: 1.   浏览器对单一域名的请求有并发限制. 在同一个域名下,一般来说有js,css,img,media,html等等静态资源,如果资

qt静态库编译加载资源的问题

qt有一套资源管理系统,如果将资源编译到可执行文件中,则可以直接访问可执行文件中的资源文件, 访问方式如下 :/prefix/location 但有的时候可以因为资源比较大,所以我们需要把资源编译成外部二进制资源文件*.rcc文件,这样可以提高可执行文件的加载速度. 编译方式rcc -binary myresource.qrc -o myresource.rcc 然后通过 QResouce::registerResouce("")//指定二进制资源的路径,将二进制资源加载进去即可 详见