Skip to main content

1.Java面试题

java 启动命令

指定JAR文件启动:

java -jar YourJarFile.jar		#执行包含main方法的JAR文件

指定堆内存和堆外内存大小

java -Xms256m -Xmx512m ClassName

-Xms用于设置初始堆大小,-Xmx用于设置最大堆大小。这里的 256m表示256兆字节,512m表示512兆字节。

指定Java虚拟机参数

java -DpropertyName=value ClassName

使用 -D参数可以设置Java虚拟机的系统属性。

java优化

  1. 代码层面的优化:
    • 使用合适的数据结构和算法: 选择适当的数据结构和算法有助于提高代码的执行效率。例如,合适的集合类、查找算法等。
      • 避免不必要的循环和递归。
      • 例如ArrayList和HashMap的使用要比Vector和Hashtable更高效。
    • 避免过度的同步: 合理使用同步机制,避免过度的同步可能导致性能问题。使用局部变量和不可变对象减少共享资源,从而减小竞争条件。
    • 避免过多的异常: 异常处理可能会带来额外的开销。不要过多地在正常业务逻辑中使用异常。处理预期的情况可以通过返回错误码或其他方式。
  2. 内存管理的优化:
    • 合理配置堆大小: 根据应用的内存需求,通过调整 -Xms-Xmx等参数配置堆大小,避免过小导致频繁GC,也避免过大导致内存浪费。
    • 注意内存泄漏: 定期进行内存分析,确保没有内存泄漏,使用工具如Java VisualVM、Eclipse Memory Analyzer等进行分析。
  3. 垃圾回收的优化:
    • 选择合适的垃圾回收器: 根据应用的负载和特性选择合适的垃圾回收器,例如CMS(Concurrent Mark-Sweep)、G1(Garbage-First)、Parallel等。
    • 调整垃圾回收参数:通过调整垃圾回收相关的参数,如新生代和老年代的比例、停顿时间等,来优化垃圾回收性能。
  4. 并发性能的优化:
    • 使用合适的并发集合: 在多线程环境中,使用Java.util.concurrent包提供的并发集合,如 ConcurrentHashMapCopyOnWriteArrayList等,而不是Hashtable。。
    • 使用线程池: 使用线程池来管理线程,避免频繁地创建和销毁线程,以及过度消耗系统资源。
    • 避免死锁: 注意并发编程中的死锁情况,使用合适的同步机制,如 Lock接口,来避免死锁。
  5. I/O性能的优化:
    • 使用缓冲流: 使用缓冲输入/输出流来提高I/O性能,减少磁盘读写次数。
    • 合理使用NIO: 使用Java NIO(非阻塞I/O)来处理大量的并发连接。
  6. JVM调优:
    • 合理设置Java虚拟机参数: 通过设置Java虚拟机参数,如 -Xms-Xmx-XX:MaxPermSize等,来调整堆大小、永久代大小等。
    • 性能监控和分析:使用性能监控工具,如VisualVM、JConsole等,来监控和分析JVM的性能,定位问题并进行调优。
  7. 使用性能测试:
    • 进行性能测试: 使用性能测试工具,如Apache JMeter、Gatling等,对应用进行压力测试,发现并解决性能瓶颈。
    • 模拟生产环境: 在测试环境中模拟真实的生产负载,以更好地评估应用程序的性能,并调整相应的配置。