Memory management

248 views

Published on

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
248
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Memory management

  1. 1. MEMORY MANAGEMENT COMPARATIVE OF C/C+ +/JVM/PYTHON. DANIEL FRANÇA
  2. 2. What’s memory management? The process of dynamically allocate memory when you need and free when you don’t need it anymore.
  3. 3. How it’s done? Allocate memory from the heap with enough size to store what you need. Free it when you don’t need it. It can be done either manually or automatic. Different algorithms can be used (Ref counting/mark and sweep, etc)
  4. 4. C Manual memory management through pointers To allocate memory you need to do a request with the size of the memory block you want to allocate: char* ptr = malloc(sizeof(char)*20); //Allocate enough size for an array of chars size 19 + 1 byte reserved for the null termination. To free memory you call free free(ptr); //Free memory of ptr You need to be aware of the ownership of the pointer. (who’s responsible for free the memory)
  5. 5. Pros: Granular control. You allocate what you need and free as soon as you don’t need it. Usually much lower memory footprint. Cons Dynamic allocations are slow and non-deterministic. Memory-leaks can happen.
  6. 6. C++ Manual memory management/RAII/Smart pointers Manual memory management is made through new and delete operators. RAII: The object is responsible for free the resources in its deletion, you can see this approach in standard classes like string and fstream. Smart pointers: You’ve a class that encapsulates and simulates a pointer, so you don’t need to handle the pointer directly, the standard library of C++11 allows different types of smart pointers like: unique_ptr, shared_ptr and weak_ptr.
  7. 7. Pros A wide range of tools to help memory management. You can use a high or low-level approach. Small performance penalty. Cons Understand how the methods work can be complex. Still memory-leaks prone.
  8. 8. JVM (Oracle hotspot) Automatic Garbage Collection Mark and sweep algorithm (mark what’s alive, the remaining are marked as “free”) No memory is returned to the OS Generational GC Different collections by age (young, old and permanent) Memory is allocated in advance
  9. 9. Pros You don’t need to worry about manual deallocations Fine tuning of GC to optimize performance "new" operator has only an increment pointer cost Cons Complex GC system Stop-the-world event when running Major GC is very slow Hard to detect cause of memory leaks Non deterministic behaviour
  10. 10. Python (CPython) Automatic/Reference counting/Generational GC Reference counting can’t handle reference cycles, so here comes the garbage collector. GC works based on a threshold of allocations/deallocations. You can disable GC for improve performance as GC has a performance penalty.
  11. 11. Pros Automatic memory management, you can focus in the algorithm. You can call GC manually if you want. Debug tools for GC (i.e: DEBUG_LEAK flags) Cons Doesn’t care about the memory usage (instead use threshold of allocations/deallocations). Doesn’t care about size of objects (instead it counts only the numbers). Performance and space penalty. Memory leaks are harder for identify the source.
  12. 12. Considerations There’re different approaches trying to find the best memory management model. Sometimes you need to chose between performance or memory footprint. Non-deterministic GC is not suitable for RT applications. There’re different tools to track memory leaks (i.e: Valgrind) Automatic memory management doesn’t mean you don’t need to think and understand it.
  13. 13. Dank u Vragen?

×