Chuyển đến nội dung chính

Tổng quan về Machine Learning

  TỔNG QUAN VỀ MACHINE LEARNING Dưới đây là note của mình về tóm tắt tổng quan về Machine Learning, về một số các mô hình truyền thống. Mọi người có thể tham khảo theo bài viết dưới đây! https://www.facebook.com/share/p/1HsBe8P9Xy/ Người viết: Lê Công Diễn Mang đi nhớ ghi nguồn

Stack và Heap trong Java


Stack và Heap trong Java
Đối với các lập trình viên, không chỉ hoàn thiện chương trình là đủ, chúng ta còn phải làm cho chương trình có hiệu suất tốt hơn: làm chương trình chạy thời gian ngắn hơn, tốt ít bộ nhớ hơn. Vấn đề về bộ nhớ chính là một bài toán hiệu suất mà các nhà lập trình phải giải quyết nó một cách tối ưu nhất. Để giải quyết về vấn đề này, chúng ta cần phải hiểu rõ về bộ nhớ trên máy tính, đặc biệt là việc sử dụng bộ nhớ của nó.

Ô nhớ hiểu đơn giản là một đơn vị để lưu trữ dữ liệu. Tập hợp nhiều ô nhớ được gọi là bộ nhớ (hoặc vùng bộ nhớ). Trong Java, vì là một ngôn ngữ ra đời cải tiến hơn so với các ngôn ngữ trước, nên việc phân chia vùng nhớ và xử lý chúng không đơn giản chỉ xoay quanh về khái niệm bộ nhớ.
Bộ nhớ trong Java được chia làm 2 vùng: Stack và Heap.
Stack được xem là vùng bộ nhớ để thực thi luồng. Chúng lưu trữ các biến cục bộ, các tham số của phương thức. Chúng hoạt động như tên gọi của nó (Stack – chồng chất), biến đầu tiên sẽ nằm ở dưới cùng, các biến sau sẽ chồng lên biến trước và cứ thế lên trên cùng.
Heap là bộ nhớ để lưu trữ các đối tượng thực sự. Các object khi khởi tạo thì bộ nhớ của nó sẽ nằm trong Heap, còn bản thân nó là một địa chỉ lưu ở Stack và truy cập đến biến trong Heap. Ví dụ ta có Dog a = new Dog(), thì a mang giá trị là địa chỉ đi đến bộ nhớ thực sự của nó, nơi mà các thuộc tính được lưu bên trong nó.
Để hiểu rõ hơn cách Stack và Heap hoạt động, ta sẽ làm ví dụ như sau (vừa nhìn hình vừa đọc tiếp nhé):



Chúng ta tạo ra 1 class Dog, và một hàm main dùng để xuất ra name của class Dog. Ở đây, khi hàm main chạy, 1 luồng sinh ra, khi các biến khởi tạo trong luồng này, nó sẽ lưu trong Stack. Quy trình chạy theo các bước
1.     Ban đầu, chúng ta khai báo 1 biến t là kiểu số nguyên, biến này sẽ tạo trong bộ nhớ Stack.
2.     Tiếp đó, chúng ta khai báo 1 biến aDog kiểu Dog, biến này sẽ được lưu trong bộ nhớ Stack.
3.     Khi chúng ta khởi tạo bằng toán tử new và truyền tham số vào, lúc này các bộ nhớ trong vùng Heap sẽ cung cấp cho đối tượng này, cụ thể là cung cấp cho các thuộc tính của đối tượng này. Khi chạy hết hàm Constructor, các giá trị sẽ đưa vào các thuộc tính trên. Cuối cùng, biến aDog sẽ lưu trữ địa chỉ trỏ tới vùng nhớ đó.
4.     Bắt đầu thực hiện gọi hàm viewName() và truyền tham số aDog vào.
5.     Trong viewName(), biến thisDog được sinh ra tại Stack, và được truyền địa chỉ từ aDog vào, nên cả aDog và thisDog đều mang cùng 1 địa chỉ trỏ tới Object đã khởi tạo trước đó.
6.     Biến String được khai báo, và nó cũng lưu địa chỉ tại Stack, trỏ đến vị trí chứa dữ liệu là name của thisDog.
Vì String là một dạng dữ liệu dặc biệt, không phải kiểu nguyên thủy, và cách tổ chức bộ nhớ cũng khác so với các kiểu dữ liệu khác, nên mình chỉ nói một cách đơn giản nhất thôi
7.     Class System gọi hàm out.print() ra làm việc. Hàm trên làm việc và xuất ra Console name của thisDog.
            Tuy có vẻ khó hiểu nhưng thực sự thì khó hiểu thật *cười. Có một số khuất mắt mình vẫn không thể giải đáp được, ví dụ như là int t khi chưa gán giá trị thì có khởi tạo vùng nhớ hay không, và nguyên tắc sử dụng bộ nhớ của String. Tuy nhiên, vấn đề cơ bản về Stack và Heap cũng đã được giải quyết ổn thỏa. Phù!
Nội dung bài viết thuộc về Lê Công Diễn.

Người viết: Lê Công Diễn
Mang đi nhớ ghi nguồn

Nhận xét

Bài đăng phổ biến từ blog này

TÂN SINH VIÊN NÊN LỰA CHỌN LAPTOP NHƯ THẾ NÀO? (CỰC CHI TIẾT)

  TÂN SINH VIÊN NÊN LỰA CHỌN LAPTOP NHƯ THẾ NÀO (CỰC CHI TIẾT)? Mùa tựu trường cũng đã đến gần, và đây cũng là lúc các bạn sinh viên nhập học chuẩn bị sắm sửa cho mình một chiếc laptop cá nhân, phục vụ cho quãng thời gian học đại học của bạn. Tuy nhiên, vì là tân sinh viên nên bạn chưa hề có bất kỳ kinh nghiệm gì trong việc lựa chọn chiếc laptop phù hợp. Bản thân mình không phải là một tay chơi laptop, tuy nhiên mình có đủ kiến thức cơ bản để tìm kiếm và lựa chọn chiếc laptop phù hợp với bản thân mình. Hy vọng bài viết này sẽ phần nào giúp bạn, có thể là một tân sinh viên, hoặc có thể là một ai đó bất kỳ, tìm ra cho mình một chiếc laptop ưng ý nhất. Trước khi đi thẳng vào việc lựa chọn laptop, mình sẽ đưa ra rõ từ bối cảnh bản thân cho đến thông tin về thị trường laptop. Từ bối cảnh này bạn sẽ có cơ sở lựa chọn và đưa ra quyết định đúng đắn, phù hợp với bản thân hơn. Tiểu sử mua laptop của bản thân mình (tâm lý sinh viên khi mới mua) Vào khoảng thời gian này tầm 7 năm về trước (ngh...

Tổng quan về Machine Learning

  TỔNG QUAN VỀ MACHINE LEARNING Dưới đây là note của mình về tóm tắt tổng quan về Machine Learning, về một số các mô hình truyền thống. Mọi người có thể tham khảo theo bài viết dưới đây! https://www.facebook.com/share/p/1HsBe8P9Xy/ Người viết: Lê Công Diễn Mang đi nhớ ghi nguồn

Tìm hiểu Linear Regression [Machine Learning cho người ngố]

  Machine Learning cho người ngố Phần 1: Linear Regression Mình đang dự định làm một series về Machine Learning. Không hẳn là sẽ có nhiều thời gian làm về cái này, nhưng sự hứng thú của mình về nó sẽ là động lực lớn để mình cố gắng thêm. Bạn có thấy tiêu đề bài viết của mình có gì khác lạ không? Cho người ngố? Cụm từ tiếng Anh của nó là “for dummies”. Bạn sẽ phát hiện ra rằng cụm từ này xuất hiện nhiều trong các tựa đề cuốn sách “Design Pattern for Dummies”, “ English Grammar for Dummies”,… cụm từ này có nghĩa là ngay cả khi bạn ngu ngốc thì vẫn có thể đọc được. Và đó cũng chính là mục tiêu của mình khi viết bài blog, làm sao để mọi người có thể đọc được. Các bài viết trên mạng đều sử dụng khá nhiều thuật ngữ và được viết một cách bài bản, vì họ là người chuyên đi nghiên cứu. Còn mình khi viết bài sẽ cố gắng đứng trên góc độ của các bạn, và giải thích rõ những thuật ngữ, cũng như dùng lời văn gần gũi nhất. Nào cùng bắt đầu nhé! Phần đầu tiên chúng ta sẽ tìm hiểu về Linear...