精华内容
下载资源
问答
  • 写论文时遇到的问题及解决办法

    千次阅读 2020-09-22 15:39:13
    问题1:利用endnote关于出现{ },而不是[1]. 解决办法:找到WORD中的update Citations and Bibliography,点击后,即可恢复[]。... 解决办法:Chinese Std GBT7714(numeric) 问题3:如何在word...

           问题1:利用endnote关于出现{ },而不是[1].

           解决办法:找到WORD中的update Citations and Bibliography,点击后,即可恢复[]。

           问题2:写论文时,endnote中常用的字体是什么?

            解决办法:Chinese Std GBT7714(numeric)

           问题3:如何在word中添加Endnote的字体?

           解决办法:在endnote中,找到“编辑”,“输出样式”,接着“打开样式管理器”,在其中选择需要的样式,且在

             “样式信息/预览”中可以看到这种样式的格式。

    展开全文
  • 常见的内存泄漏原因及解决方法

    万次阅读 2019-02-22 04:54:14
    常见的内存泄漏及解决方法 1、单例造成的内存泄漏 由于单例的静态特性使得其生命周期和应用的生命周期一样长,如果一个对象已经不再需要使用了,而单例对象还持有该对象的引用,就会使得该对象不能被正常回收...

    (Memory Leak,内存泄漏)

    为什么会产生内存泄漏?

    当一个对象已经不需要再使用本该被回收时,另外一个正在使用的对象持有它的引用从而导致它不能被回收,这导致本该被回收的对象不能被回收而停留在堆内存中,这就产生了内存泄漏。

    内存泄漏对程序的影响?

    内存泄漏是造成应用程序OOM的主要原因之一。我们知道Android系统为每个应用程序分配的内存是有限的,而当一个应用中产生的内存泄漏比较多时,这就难免会导致应用所需要的内存超过系统分配的内存限额,这就造成了内存溢出从而导致应用Crash。

    如何检查和分析内存泄漏?

    因为内存泄漏是在堆内存中,所以对我们来说并不是可见的。通常我们可以借助MAT、LeakCanary等工具来检测应用程序是否存在内存泄漏。
    1、MAT是一款强大的内存分析工具,功能繁多而复杂。
    2、LeakCanary则是由Square开源的一款轻量级的第三方内存泄漏检测工具,当检测到程序中产生内存泄漏时,它将以最直观的方式告诉我们哪里产生了内存泄漏和导致谁泄漏了而不能被回收。

    常见的内存泄漏及解决方法

    1、单例造成的内存泄漏

    由于单例的静态特性使得其生命周期和应用的生命周期一样长,如果一个对象已经不再需要使用了,而单例对象还持有该对象的引用,就会使得该对象不能被正常回收,从而导致了内存泄漏。
    示例:防止单例导致内存泄漏的实例

    // 使用了单例模式
    public class AppManager {
        private static AppManager instance;
        private Context context;
        private AppManager(Context context) {
            this.context = context;
        }
        public static AppManager getInstance(Context context) {
            if (instance != null) {
                instance = new AppManager(context);
            }
            return instance;
        }
    }
    

    这样不管传入什么Context最终将使用Application的Context,而单例的生命周期和应用的一样长,这样就防止了内存泄漏。???

    2、非静态内部类创建静态实例造成的内存泄漏

    例如,有时候我们可能会在启动频繁的Activity中,为了避免重复创建相同的数据资源,可能会出现如下写法:

    public class MainActivity extends AppCompatActivity {
    
        private static TestResource mResource = null;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            if(mResource == null){
                mResource = new TestResource();
            }
            //...
        }
        
        class TestResource {
        //...
        }
    }
    

    这样在Activity内部创建了一个非静态内部类的单例,每次启动Activity时都会使用该单例的数据。虽然这样避免了资源的重复创建,但是这种写法却会造成内存泄漏。因为非静态内部类默认会持有外部类的引用,而该非静态内部类又创建了一个静态的实例,该实例的生命周期和应用的一样长,这就导致了该静态实例一直会持有该Activity的引用,从而导致Activity的内存资源不能被正常回收。
    解决方法:将该内部类设为静态内部类或将该内部类抽取出来封装成一个单例,如果需要使用Context,就使用Application的Context。

    3、Handler造成的内存泄漏

    示例:创建匿名内部类的静态对象

    public class MainActivity extends AppCompatActivity {
    
        private final Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                // ...
            }
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            new Thread(new Runnable() {
                @Override
                public void run() {
                    // ...
                    handler.sendEmptyMessage(0x123);
                }
            });
        }
    }
    

    1、从Android的角度
    当Android应用程序启动时,该应用程序的主线程会自动创建一个Looper对象和与之关联的MessageQueue。当主线程中实例化一个Handler对象后,它就会自动与主线程Looper的MessageQueue关联起来。所有发送到MessageQueue的Messag都会持有Handler的引用,所以Looper会据此回调Handle的handleMessage()方法来处理消息。只要MessageQueue中有未处理的Message,Looper就会不断的从中取出并交给Handler处理。另外,主线程的Looper对象会伴随该应用程序的整个生命周期。
    2、 Java角度
    在Java中,非静态内部类和匿名类内部类都会潜在持有它们所属的外部类的引用,但是静态内部类却不会。

    对上述的示例进行分析,当MainActivity结束时,未处理的消息持有handler的引用,而handler又持有它所属的外部类也就是MainActivity的引用。这条引用关系会一直保持直到消息得到处理,这样阻止了MainActivity被垃圾回收器回收,从而造成了内存泄漏。
    解决方法:将Handler类独立出来或者使用静态内部类,这样便可以避免内存泄漏。

    4、线程造成的内存泄漏

    示例:AsyncTask和Runnable

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            new Thread(new MyRunnable()).start();
            new MyAsyncTask(this).execute();
        }
    
        class MyAsyncTask extends AsyncTask<Void, Void, Void> {
    
            // ...
    
            public MyAsyncTask(Context context) {
                // ...
            }
    
            @Override
            protected Void doInBackground(Void... params) {
                // ...
                return null;
            }
    
            @Override
            protected void onPostExecute(Void aVoid) {
                // ...
            }
        }
    
        class MyRunnable implements Runnable {
            @Override
            public void run() {
                // ...
            }
        }
    }
    

    AsyncTask和Runnable都使用了匿名内部类,那么它们将持有其所在Activity的隐式引用。如果任务在Activity销毁之前还未完成,那么将导致Activity的内存资源无法被回收,从而造成内存泄漏。
    解决方法:将AsyncTask和Runnable类独立出来或者使用静态内部类,这样便可以避免内存泄漏。

    5、资源未关闭造成的内存泄漏

    对于使用了BraodcastReceiver,ContentObserver,File,Cursor,Stream,Bitmap等资源,应该在Activity销毁时及时关闭或者注销,否则这些资源将不会被回收,从而造成内存泄漏。

    1)比如在Activity中register了一个BraodcastReceiver,但在Activity结束后没有unregister该BraodcastReceiver。
    2)资源性对象比如Cursor,Stream、File文件等往往都用了一些缓冲,我们在不使用的时候,应该及时关闭它们,以便它们的缓冲及时回收内存。它们的缓冲不仅存在于 java虚拟机内,还存在于java虚拟机外。如果我们仅仅是把它的引用设置为null,而不关闭它们,往往会造成内存泄漏。
    3)对于资源性对象在不使用的时候,应该调用它的close()函数将其关闭掉,然后再设置为null。在我们的程序退出时一定要确保我们的资源性对象已经关闭。
    4)Bitmap对象不在使用时调用recycle()释放内存。2.3以后的bitmap应该是不需要手动recycle了,内存已经在java层了。

    6、使用ListView时造成的内存泄漏

    初始时ListView会从BaseAdapter中根据当前的屏幕布局实例化一定数量的View对象,同时ListView会将这些View对象缓存起来。当向上滚动ListView时,原先位于最上面的Item的View对象会被回收,然后被用来构造新出现在下面的Item。这个构造过程就是由getView()方法完成的,getView()的第二个形参convertView就是被缓存起来的Item的View对象(初始化时缓存中没有View对象则convertView是null)。

    构造Adapter时,没有使用缓存的convertView。
    解决方法:在构造Adapter时,使用缓存的convertView。

    7、集合容器中的内存泄露

    我们通常把一些对象的引用加入到了集合容器(比如ArrayList)中,当我们不需要该对象时,并没有把它的引用从集合中清理掉,这样这个集合就会越来越大。如果这个集合是static的话,那情况就更严重了。
    解决方法:在退出程序之前,将集合里的东西clear,然后置为null,再退出程序。

    8、WebView造成的泄露

    当我们不要使用WebView对象时,应该调用它的destory()函数来销毁它,并释放其占用的内存,否则其长期占用的内存也不能被回收,从而造成内存泄露。
    解决方法:为WebView另外开启一个进程,通过AIDL与主线程进行通信,WebView所在的进程可以根据业务的需要选择合适的时机进行销毁,从而达到内存的完整释放。

    如何避免内存泄漏?

    1、在涉及使用Context时,对于生命周期比Activity长的对象应该使用Application的Context。凡是使用Context优先考虑Application的Context,当然它并不是万能的,对于有些地方则必须使用Activity的Context。对于Application,Service,Activity三者的Context的应用场景如下:

     

     

    其中,NO1表示Application和Service可以启动一个Activity,不过需要创建一个新的task任务队列。而对于Dialog而言,只有在Activity中才能创建。除此之外三者都可以使用。

    2、对于需要在静态内部类中使用非静态外部成员变量(如:Context、View ),可以在静态内部类中使用弱引用来引用外部类的变量来避免内存泄漏。
    3、对于不再需要使用的对象,显示的将其赋值为null,比如使用完Bitmap后先调用recycle(),再赋为null。
    4、保持对对象生命周期的敏感,特别注意单例、静态对象、全局性集合等的生命周期。
    5、对于生命周期比Activity长的内部类对象,并且内部类中使用了外部类的成员变量,可以这样做避免内存泄漏:
    1)将内部类改为静态内部类
    2)静态内部类中使用弱引用来引用外部类的成员变量

    参考

    Android内存泄漏总结



    作者:李俊的博客
    链接:https://www.jianshu.com/p/90caf813682d
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    展开全文
  • 粘包、拆包解决办法 通过以上分析,我们清楚了粘包或拆包发生的原因,那么如何解决这个问题呢?解决问题的关键在于如何给每个数据包添加边界信息,常用的方法有如下几个: 1、发送端给每个数据包添加包首部,...

    参考此博客https://blog.insanecoder.top/tcp-packet-splice-and-split-issue/

    粘包、拆包发生原因
    发生TCP粘包或拆包有很多原因,现列出常见的几点,可能不全面,欢迎补充,
    1、要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包。
    2、待发送数据大于MSS(最大报文长度),TCP在传输前将进行拆包。
    3、要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包。
    4、接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包。
    等等。

    粘包、拆包解决办法
    通过以上分析,我们清楚了粘包或拆包发生的原因,那么如何解决这个问题呢?解决问题的关键在于如何给每个数据包添加边界信息,常用的方法有如下几个:

    1、发送端给每个数据包添加包首部,首部中应该至少包含数据包的长度,这样接收端在接收到数据后,通过读取包首部的长度字段,便知道每一个数据包的实际长度了。
    2、发送端将每个数据包封装为固定长度(不够的可以通过补0填充),这样接收端每次从接收缓冲区中读取固定长度的数据就自然而然的把每个数据包拆分开来。
    3、可以在数据包之间设置边界,如添加特殊符号,这样,接收端通过这个边界就可以将不同的数据包拆分开。
    等等。

    测试的时候采用的是一台机器连续发送数据来模拟高并发的场景,所以在测试的时候会发现服务器端收到的数据包的个数经常会小于包的序号,好像发生了丢包。但经过仔细分析可以发现,这种情况是因为TCP发送缓存溢出导致的丢包,也就是这个数据包根本没有发出来。也就是说,发送端发送数据过快,导致接收端缓存很快被填满,这个时候接收端会把通知窗口设置为0从而控制发送端的流量,这样新到的数据只能暂存在发送端的发送缓存中,当发送缓存溢出后,就出现了我上面提到的丢包,这个问题可以通过增大发送端缓存来缓解这个问题,

    展开全文
  • Vue内存泄露原因及解决办法

    千次阅读 2020-02-20 20:25:44
    Vue-Cli内存泄露部分原因 1、echarts图未彻底删除; 2、setTimeout和setInterval未清除; 3、全局定于变量未清除; 4、侦听器未清除 场景分析 其中全局对象onresize,侦听事件应在组价销毁前清除。...

    Vue-Cli内存泄露部分原因

    1、echarts图未彻底删除;
    2、setTimeout和setInterval未清除;
    3、全局定于变量未清除;
    4、侦听器未清除

    场景分析


    其中全局对象onresize,侦听事件应在组价销毁前清除。
    在这里插入图片描述
    重点:在vue中,echarts绘图是十分消耗资源的,所以在组件销毁前,一定要清除对应的数据。
    在data中定义如下:
    在这里插入图片描述
    在销毁组件前,应进行如下操作:
    在这里插入图片描述
    以上几个部分是在项目中遇到过的内存泄露问题,希望对大家有帮助。

    展开全文
  • 栈溢出及解决方法

    千次阅读 2019-01-20 22:35:08
    栈溢出及解决方法 文章目录栈溢出及解决方法1. 什么是栈溢出?2. 栈溢出的解决方法 1. 什么是栈溢出? 缓冲区溢出是由于C语言系列设有内置检查机制来确保复制到缓冲区的数据不得大于缓冲区的大小,因此当这个数据...
  • 学生信息管理系统我遇到的问题及解决办法

    千次阅读 热门讨论 2019-03-21 20:13:37
    解决方法: 实时错误91: 我的就是自己不认真把代码打错了。自己对了半天的代码才找的的问题。这个事情告诉我们代码的时候一点要认真。 实时错误3021: 出现实时错误3021时,后面都会有提示——BOF或EOF中有一个是...
  • 毕业设计遇到的问题及解决方法

    万次阅读 2018-07-01 22:36:18
    解决办法:把 jar包复制到该项目关联(配置)tomcat/web-inf/lib目录下,刷新重启项目 6.连接MySql数据库失败。 原因:没添加jar包,加入mysql-connector-java-5.0.8-bin.jar包. 7.问题:客户端返回服务器中文乱码 ...
  • 数据库常见问题及解决办法

    千次阅读 2016-07-08 23:15:01
    解决办法:"insert into forgetpsw (username,mail) values('"+username_for+"','"+usermail_for+"'" 这里少了一个引号 第一范式 第二范式 第三范式: 范式:英文名称是 Normal Form,它是英国人 E.F.Codd(关系...
  • 常见蓝屏代码解释及解决方法

    万次阅读 2020-07-22 20:12:59
    蓝屏代码解释及解决方法     小云因为常遇到电脑蓝屏情况,今天就来整理一下部分常见的蓝屏代码分析及解决方法。 1、蓝屏代码 文字说明:IRQL-NOT-LESS-OR-EQVAL 通常的原因:驱动程序使用了...
  • C++栈溢出的原因及解决方法

    千次阅读 2018-09-09 16:50:14
    有时候我们编写C++代码是,数组开的太大,会出现栈溢出的情况,这是由于操作系统给程序开出的栈的大小一般为1M ~ 2...解决方法有两种: 1. 把数组改为stl的vector。 2. 使用dev c++编译,在Linker中加入一条指令...
  • 何为软件危机? 软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护...解决软件危机的最好方法:软件工程。 软件工程的概念: 1968年秋季,北大西洋公约组织的科技委员会召开
  • C++内存泄漏及解决办法

    千次阅读 2018-10-01 21:44:51
    5.怎么有效解决内存泄漏问题? 智能指针。因为智能指针可以自动删除分配的内存。智能指针和普通指针类似,只是不需要手动释放指针,而是通过智能指针自己管理内存的释放。关于智能指针见 next --.–。
  • Matlab常见语法错误及解决方法

    千次阅读 2019-09-16 20:43:56
    文章目录Matlab常见语法错误及解决方法1.Subscript indices must either be real positive integers or logicals2.Undefined function or variable "U"3.Matrix dimensions must agree4.Function definitions are ...
  • 数据库连接失败的原因及解决方法

    千次阅读 2017-03-31 10:01:00
    一般的业务系统均采用的是SQL数据库,我们这里总结了SQL数据库连接失败的原因和解决方法:  原因一:登录账号、密码、服务器名称、数据库名称登录错误导致不能连接,这个比较常见,仔细检查好所填信息是否正确...
  • TCP粘包,拆包及解决方法

    万次阅读 多人点赞 2018-05-24 00:19:44
    解决问题的关键在于如何给每个数据包添加边界信息,常用的方法有如下几个: 1、发送端给每个数据包添加包首部,首部中应该至少包含数据包的长度,这样接收端在接收到数据后,通过读取包首部的长度字段,便知道每一个...
  • 银河麒麟操作系统常用问题及解决方法
  • 梯度消失,梯度爆炸产生的原因及解决办法

    万次阅读 多人点赞 2018-08-18 13:21:50
    2.梯度消失和爆炸的解决办法 a)预训练+微调 b)梯度裁剪:主要针对梯度爆炸问题,设置一个阈值,当梯度查过这个阈值之后将它限制在这个范围之内。 c)权重正则化,L1和L2正则化。 正则化是通过对网络...
  • 下面小编将详细介绍解决蓝屏代码0x0000007b的方法,一起来看看吧 导致驱动加载错误的情况有以下三种: 一、无法自动识别硬盘控制器:用户在使用光盘重装系统时,由于购买的光盘是非正版的,其自动加载的硬盘控制...
  • 通过对“常见小票打印机故障及解决方法汇总视频教程”课程学习,达到以下目的:1、可以独立自主安装打印机驱动以及安装打印机硬件设备 2、可以独立自主排除常见打印机故障
  • -bash-4.1$原因及解决方法

    千次阅读 2018-04-21 22:35:06
    -bash-4.1$原因及解决方法 1、有时候在切换用户时会报这样的错 -bash-4.1$ (意思是用户的环境变量路径不正确而导致的) 解决方法一: vim /home/oracle/.bash_profile ...
  • tomcat 404 问题及解决方法

    万次阅读 2016-07-11 11:16:48
    今天就总结一下tomcat 404 的几种常见问题及解决方法。 问题一: 指定目录下没有访问的文件,这是最常见的,也是最容易解决的。只需要将访问的文件(如:a.html)放到指定目录下即可。 问题二: 将访问的...
  • 栈溢出(stackoverflow)的原因及解决办法作者:不要以为你赢了最近在做一个程序(VC6.0),功能大概有网络通信、数据库、绘图等。测试的时候程序一运行到某个函数就出现此错误,查了很多地方,试了很多解决
  • 当用 System.loadLibrary(String libname) 方法(参数是文件名)装入库文件时,请确保文件名拼写正确以及没有指定扩展名。还有,确保库文件的位置在类路径中,从而确保 JVM 可以访问该库文件。 无法找到具有...
  • 软件危机表现,原因及解决方法

    千次阅读 2019-08-01 19:39:34
    表现: ...解决方法: 用现代工程的概念,原理,技术和方法进行计算机软件的开发,管理和维护,由此诞生了软件工程。 软件工程是用工程,科学和数学的原则与方法来研制,维护计算机软件的有关技术...
  • 解决办法:注释掉或者删除掉该段代码即可 2、 关联问题:在用loadrunner自带对比工具对比脚本后 找到需要关联的动态值。在关联后回放脚本时报错HTTP-status code 417(exception failed)错误时,...
  • Matlab常见错误及解决办法归纳

    万次阅读 多人点赞 2017-02-17 11:46:26
    Matlab常见错误及解决办法归纳  1.Subscript indices must either be real positive integers or logicals 中文解释:下标索引必须是正整数类型或者逻辑类型 出错原因:在访问矩阵(包括向量、二维矩阵、多维...
  • Jupyter notebook之新手常遇到的问题及解决办法(一) 大家在日常使用notebook时难免会遇到各种问题,尤其是对于刚开始接触jupyter notebook的小白用户来说更是如此,因此本文致力于解决小白用户在日常使用notebook...
  • win10电脑使用一段时间后,开机速度...今天小编就为大家带来了一个非常实用的解决方法。 操作步骤: 1.进入win10系统桌面,鼠标点击开始按钮,进入下一步。 2.在开始菜单的搜索框中输入msconfig并回车打开系统配置...
  • 内存溢出的场景及解决办法

    万次阅读 2019-01-08 10:30:55
    怎么解决?   对于java程序员来说,在虚拟机自动内存管理机制的帮助下,不需要自己实现释放内存,不容易出现内存泄漏和内存溢出的问题,由虚拟机管理内存这一切看起来非常美好,但是一旦出现内存溢出或者内存泄漏...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,899,561
精华内容 2,359,824
关键字:

及解决方法