Java基础知识八股

1.为什么静态方法无法调用非静态方法?

回答:因为静态方法是随着类的加载而加载,而非静态方法则是随着类的实例化才会被加载,生存周期不一样,所以静态方法的生命周期更长

2.Java–内部类持有外部类导致内存泄露的原因和解决方案

原因:非静态内部类持有外部类的时候,如果有的地方引用了内部类,会导致这个外部类也会被引用,即使后期外部类没有用,但是仍然无法进行回收。

解决方法、

  1. 不要让其他的地方持有这个非静态内部类的引用,直接在这个非静态内部类执行业务。
  2. 将非静态内部类改为静态内部类。
    1. 内部类改为静态的之后,它所引用的对象或属性也必须是静态的,所以静态内部类无法获得外部对象的引用,只能从 JVM 的 Method Area(方法区)获取到static类型的引用

为什么使用:

  1. 当内部类只在外部类中使用时,匿名内部类可以让外部不知道它的存在,从而减少了代码的维护工作。
  2. 当内部类持有外部类时,它就可以直接使用外部类中的变量了,这样可以很方便的完成调用,如下代码所示:
    package org.example.a;class Outer{private String outerName = "Tony";class Inner{private String name;public Inner() {this.name = outerName;}}Inner createInner() {return new Inner();}
    }public class Demo {public static void main(String[] args) {Outer.Inner inner = new Outer().createInner();System.out.println(inner);}
    }

3.ThreadLocal出现内存泄漏的原因及怎么解决

原因:

1.ThreadLocal变量没有被明确的移除。在使用ThreadLocal时,当线程结束,如果ThreadLocal变量没有被手动清除,就会导致这部分内存无法被回收,最终导致内存泄漏。

2.ThreadLocal变量一直存在于ThreadLocalMap中。每个线程都有一个ThreadLocalMap,这个Map可以存放多个ThreadLocal变量。当ThreadLocal变量没有被移除时,它所引用的对象也会一直存放在线程的ThreadLocalMap中,这会导致ThreadLocalMap变得很大,从而占用大量的内存空间,最终导致内存泄漏。

解决方法:

1.使用ThreadLocal.remove()方法

ThreadLocal<Object> threadLocal = new ThreadLocal<>();
try {Object value = new Object();threadLocal.set(value);// do something
} finally {threadLocal.remove();
}

2.使用不可变的资源 

ThreadLocal变量存储的对象最好是不可变的,因为不可变的对象不需要频繁更新,也不会因为被多个线程同时修改而出现线程安全问题。如果要修改一个ThreadLocal变量中的对象,最好使用一个新的对象替换原有的对象,从而避免引用泄漏的问题。

3.使用弱引用

ThreadLocal<Object> threadLocal = new ThreadLocal<Object>() {@Overrideprotected Object initialValue() {return new WeakReference<Object>(new Object());}
};

 4.JVM调优

原因:

Heap内存(老年代)持续上涨达到设置的最大内存值;

Full GC 次数频繁;

GC 停顿时间过长(超过1秒);

应用出现OutOfMemory等内存异常;

应用中有使用本地缓存且占用大量内存空间;

系统吞吐量与响应性能不高或不降。

调优:

java heap:参数-Xms(设置内存)和-Xmx(设置堆),建议扩大至3-4倍FullGC后的老年代空间占用。
永久代:-XX:PermSize和-XX:MaxPermSize,建议扩大至1.2-1.5倍FullGc后的永久代空间占用。
新生代:-Xmn,建议扩大至1-1.5倍FullGC之后的老年代空间占用。
老年代:2-3倍FullGC后的老年代空间占用。

新生代越大,minorGC越久,越小,minorGC越频繁

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/757453.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot+vue的火锅店管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

[做题]动态规划

文章目录 0.DP前言1.线性DP数字三角形朴素做法更优雅的写法一维优化(朴素版本) 最长上升子序列朴素做法二分&#xff08;数据加强版&#xff09; 最长公共子序列朴素做法 最短编辑距离朴素做法 编辑距离朴素做法 2.其他DP区间dp石子合并 计数dp整数划分dp写法&#xff1a;完全背…

AI - 机器学习GBDT算法

目录 GBDT 提升树 梯度提升树 GBDT算法实战案例 XGBoost &#x1f606;&#x1f606;&#x1f606;感谢大家的观看&#x1f606;&#x1f606; GBDT 梯度提升决策树&#xff08;Gradient Boosting Decision Tree&#xff09;&#xff0c;是一种集成学习的算法&…

手机投屏到电脑

手机投屏到电脑 Github 有2个开源的手机投屏项目&#xff1a; Scrcpy: https://github.com/Genymobile/scrcpy QtScrcpy: https://github.com/barry-ran/QtScrcpy 这2个项目都很好用&#xff0c;我这里用的是 Scrcpy&#xff1a; 官方文档中介绍了如何在windows上使用 Scrcpy…

基于龙芯2k1000 mips架构ddr调试心得(一)

1、基础知识 DDR2的I/O频率是DDR的2倍&#xff0c;也就是266、333、400MHz。 DDR3传输速率介于 800&#xff5e;1600 MT/s之间 DDR4的传输速率目前可达2133&#xff5e;3200 MT/s 2k1000内存&#xff1a;板载2GB DDR3 &#xff0c;可选4GB 使用龙芯芯片最好用他们自己的Bo…

C++特性三:多态的基本语法及原理剖析

一、多态的基本语法 多态分为两类 静态多态: 函数重载 和 运算符重载属于静态多态&#xff0c;复用函数名 动态多态: 派生类和虚函数实现运行时多态 静态多态和动态多态区别&#xff1a; 静态多态的函数地址早绑定 - 编译阶段确定函数地址 动态多态的函数地址晚绑定 - 运…

设计模式(结构型设计模式——桥接模式)

设计模式&#xff08;结构型设计模式——桥接模式&#xff09; 桥接模式 基本定义 桥接模式将继承关系转化成关联关系&#xff0c;它降低了类与类之间的耦合度&#xff0c;减少了系统中类的数量&#xff0c;也减少了代码量。 降低了类与类之间的耦合度&#xff1a;脱耦就是将…

三国游戏.

问题描述 小蓝正在玩一款游戏。游戏中魏(X)、蜀(Y)、吴()三个国家各自拥有一定数量的士兵X,Y, (一开始可以认为都为 0)。游戏有n个可能会发生的事件&#xff0c;每个事件之间相互独立且最多只会发生一次&#xff0c;当第个事件发生时会分别让X,Y,乙 增加Ai,Bi,Ci。 当游戏结束时…

【Python】使用selenium对Poe批量模拟注册脚本

配置好接码api即可实现自动化注册登录试用一体。 运行后会注册账号并绑定邮箱与手机号进行登录试用。 测试结果30秒一个号 import re import time import requests from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.chrome.options imp…

keithley2612A数字源表

181/2461/8938产品概述&#xff1a; Keithley 2612A源表既可用作台式I-V表征工具&#xff0c;也可用作多通道I-V测试系统的构建模块组件。对于台式使用&#xff0c;吉时利2612ASourceMeter具有嵌入式TSP Express软件工具&#xff0c;允许用户快速轻松地执行常见的I-V测试&…

微信小程序开发学习笔记——4.2showModal和showLoading界面交互操作

>>跟着b站up主“咸虾米_”学习微信小程序开发中&#xff0c;把学习记录存到这方便后续查找。 课程连接&#xff1a;https://www.bilibili.com/video/BV19G4y1K74d?p27&vd_source9b149469177ab5fdc47515e14cf3cf74 一、showModal 显示模态对话框 1、属性 https:/…

基于springboot+vue的摄影网站(源码+部署说明+系统介绍+数据库)

作者主页&#xff1a;Java程序员老张 主要内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;…

C# double类型计算精度问题解决

问题&#xff1a;res 的值0.112450000001&#xff0c;精度不对&#xff0c;预期是0.11245 double force112.45&#xff1b; double res force / Math.Pow(10, index * 3); double force112.45; double res force / Math.Pow(10, index * 3); string str res.ToString(&qu…

cuda从入门到精通(五)CUDA实现AI模型中的softmax

本文系转载&#xff0c;出处&#xff1a;https://mp.weixin.qq.com/s/BbmjiE_qemmnlTC3ue2wiw CUDA常被用于加速各种AI计算密集型任务&#xff0c;如Softmax函数的计算。 以下是一个简单的CUDA实现的Softmax函数 #include <cuda_runtime.h> #include <device_launc…

Flutter,点击图标后,显示下拉条目选框

这里给出两种方式&#xff0c;一种是点击时没有动画效果的IconGestureDetector&#xff0c;另一种是点击时带动画的Material Widget自带的IconButton。 第一种&#xff1a; MouseRegion( // 用于鼠标移动到区域&#xff0c;出现小手cursor: SystemMouseCursors.click,child: T…

SSTI漏洞详解

目录 前备知识 模块引擎&#xff1a; 模块渲染函数&#xff1a; 继承关系&#xff1a; SSTI漏洞简介 SSTI漏洞成因 SSTI漏洞原理 一些常见模块介绍 php Twig模块引擎 代码演示1 Twig模块引擎代码演示2 python flask模块 代码演示1&#xff1a; python jinja模块 代…

深入理解Java并发工具包中的CyclicBarrier

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 在Java的并发编程世界中&#xff0c;协调和管理多个线程的执行是一项复杂而关键的任务。为了简化这一挑战&#xff0c;Java并发包…

数据分析-Pandas序列滑动窗口配置参数

数据分析-Pandas序列滑动窗口配置参数 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表&…

初探Springboot 参数校验

文章目录 前言Bean Validation注解 实践出真知异常处理 总结 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 前言 工作中我们经常会遇到验证字段是否必填&#xff0c;或者字段的值是否…

Docker使用之java项目工程的部署

Docker使用之java项目工程的部署 若容器存在请先停止&#xff0c;在删除&#xff0c;然后删除镜像重新编译 //停止容器 sudo docker stop datatransfer//删除容器 sudo docker rm datatransfer//删除镜像 sudo docker rmi hrtransfer复制java项目工程文件jar包到 /apps/demo.…